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;
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;
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];
}
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.
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.
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
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]];
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!)
}
}
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"]];
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!)
}
}