web-dev-qa-db-fra.com

UIPageControl - Comment rendre l'arrière-plan transparent?

J'utilise UIPageControl et j'essaie de rendre l'arrière-plan transparent.

UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor blackColor];

Aucune suggestion?

A tenté

pageControl.backgroundColor = [UIColor clearColor];

pas de chance.

============

Ok, comme mentionné par @ powerj1984 et @daniellarsson UIPageControl ne semble pas pouvoir être modifié en ce qui concerne la position et la couleur de fond.

J'ai donc décidé de déplacer ceci vers UIViewController et de créer un UIPageControl et

@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;

Et amenez ensuite ceci au sommet de ma UIPageViewController comme dans viewDidLoad

self.pageControl.numberOfPages = self.pageTitles.count;    
[self.view addSubview:_pageControl.viewForBaselineLayout]; 

Puis j'ai mis à jour l'index de UIPageControl dans viewControllerBeforeViewController et viewControllerAfterViewController

NSUInteger index = ((HomePageContentViewController*) viewController).pageIndex; 
self.pageControl.currentPage = index;
17
sselvan

OK, comme mentionné par @ powerj1984 et @daniellarsson, UIPageControl ne semble pas pouvoir être modifié en ce qui concerne la position et la couleur de fond.

J'ai donc décidé de déplacer ceci vers UIViewController et de créer un UIPageControl et 

@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;

Et amenez ensuite ceci en haut de mon UIPageViewController comme dans viewDidLoad

self.pageControl.numberOfPages = self.pageTitles.count;    
[self.view addSubview:_pageControl.viewForBaselineLayout]; 

J'ai ensuite mis à jour l'index de UIPageControl dans viewControllerBeforeViewController et viewControllerAfterViewController.

NSUInteger index = ((HomePageContentViewController*) viewController).pageIndex; 
self.pageControl.currentPage = index;
8
sselvan
pageControl.backgroundColor = [UIColor clearColor];

travaille mais !! que vous devez définir la backgroundColor de la UIPageViewController également sur [UIColor clearColor] et que! vous verrez la couleur de fond de la vue conteneur.

- (void)initPageViewController
{
    _pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                                                      navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                    options:nil];

    UIImageView *imgView= [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    imgView.image = [UIImage imageNamed:@"NiceBGImage"];
    [self.view addSubview:imgView];

    self.view.backgroundColor = [UIColor clearColor];

    _pageController.view.frame = ({
        CGRect frame = [[UIScreen mainScreen] bounds];
        frame;
    });

    _pageController.delegate = self;
    _pageController.dataSource = self;
    _pageController.view.backgroundColor = [UIColor clearColor];

    NSArray *controllers = @[_controllers[0]];

    [self.pageController setViewControllers:controllers
                                  direction:UIPageViewControllerNavigationDirectionForward
                                   animated:NO
                                 completion:nil];

    UIPageControl *pageControl = [UIPageControl appearance];
    pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
    pageControl.currentPageIndicatorTintColor = [UIColor whiteColor];
    pageControl.backgroundColor = [UIColor clearColor];
    pageControl = [UIPageControl appearanceWhenContainedIn:[_pageController class], nil];

    [self addChildViewController:_pageController];
    [[self view] addSubview:_pageController.view];
    [self.pageController didMoveToParentViewController:self];
}
5
Miralem Cebic

Le contrôle de page est transparent par défaut.  

Vérifiez avec cet exemple de code:

UIPageControl *pageControl = [[UIPageControl alloc] init];
pageControl.frame = CGRectMake(10,10,100,100);
pageControl.numberOfPages = 8;
pageControl.currentPage = 0;
[self.view addSubview:pageControl];
[self.view bringSubviewToFront:pageControl];
[self.view setBackgroundColor:[UIColor blackColor]];

Veuillez trouver plus de possibilités de personnalisation ci-dessous

Apparence des contrôles de page

Vous pouvez personnaliser l'apparence d'un contrôle de page en définissant les propriétés décrites ci-dessous.

enter image description here

Pour personnaliser l'apparence de tous les contrôles de page de votre application, utilisez le proxyapparence (par exemple, [Apparence de UIPageControl]). Pour plus d'informations sur les mandataires d'apparence, voir Proxys d'apparence .

Couleur de teinte

La seule façon de personnaliser l'apparence d'un contrôle de page consiste à définir des teintes personnalisées pour les points représentant chaque page. Le champ Page actuelle (currentPageIndicatorTintColor) affecte la couleur du point représentant la page actuellement affichée et le champ Couleur de la teinte (pageIndicatorTintColor) affecte la couleur des points représentant toutes les autres pages. La couleur par défaut est le blanc pour le point de la page en cours et le gris translucide pour les autres points de la page.

enter image description here

Si vous souhaitez que vos couleurs personnalisées soient translucides, vous devez spécifier une couleur dont la valeur alpha est inférieure à 1,0. Cela doit être fait par programme, comme dans l'exemple suivant:

self.myPageControl.currentPageIndicatorTintColor = [UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:0.5];
self.myPageControl.pageIndicatorTintColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.5];

Vérifiez plus de détails dans UIPageControl - Developer.Apple documentation

3
Shamsudheen TK

Depuis Xcode 6.1.1 et iOS 8.1.1, je sais que définir la couleur d'arrière-plan d'un objet UIPageControl sur la couleur claire a fonctionné pour moi.

[[self pageControl] setBackgroundColor:[UIColor clearColor]];
2
Audible

J'ai finalement trouvé une solution efficace à ce problème dans Swift. Vous pouvez trouver le code original et répondre dans ce link .

Vous devez remplacer la fonction viewDidLayoutSubviews () pour amener le contrôle de page au premier plan de la vue.

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        let subViews: NSArray = view.subviews
        var scrollView: UIScrollView? = nil
        var pageControl: UIPageControl? = nil

        for view in subViews {
            if view.isKindOfClass(UIScrollView) {
                scrollView = view as? UIScrollView
            }
            else if view.isKindOfClass(UIPageControl) {
                pageControl = view as? UIPageControl
            }
        }

        if (scrollView != nil && pageControl != nil) {
            scrollView?.frame = view.bounds
            view.bringSubviewToFront(pageControl!)
        }
    }
1
Juan Ariza

Cela pourrait fonctionner si vous définissez la couleur d'arrière-plan de la UIPageControl sur une image d'arrière-plan identique à celle de votre VC couleur d'arrière-plan :

[UIPageControl appearance].backgroundColor  = [UIColor colorWithPatternImage:[UIImage imageNamed:@"pageControllerBackground"]];
0
user5970061

Voici la réponse avec extension de Juan Ariza

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let subViews: NSArray = view.subviews
    var scrollView: UIScrollView? = nil
    var pageControl: UIPageControl? = nil

    for view in subViews {
        if view.isKindOfClass(UIScrollView) {
            scrollView = view as? UIScrollView
        }
        else if view.isKindOfClass(UIPageControl) {
            pageControl = view as? UIPageControl
            pageControl?.pageIndicatorTintColor = UIColor.lightGrayColor()
            pageControl?.currentPageIndicatorTintColor = UIColor.blackColor()
            pageControl?.backgroundColor = UIColor.clearColor()
        }
    }

    if (scrollView != nil && pageControl != nil) {
        scrollView?.frame = view.bounds
        view.bringSubviewToFront(pageControl!)
    }
}
0
Illya Krit