有没有办法改变页面指示点颜色
我是新手iphone编程,我想开发一个使用页面控制的应用程序。 我的视图的背景颜色是白色的,页面控制器默认也是白色的,这使得页面控制在我的视图中不可见,所以我已经改变了页面控件的背景颜色以使其可见。 现在,视图出现修补和坏。 有没有办法改变页面控制的点颜色?
提前致谢
我们定制了UIPageControl使用页面指标的自定义图像,我列出了下面的类的胆量…
GrayPageControl.h
@interface GrayPageControl : UIPageControl { UIImage* activeImage; UIImage* inactiveImage; }
GrayPageControl.m
-(id) initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; activeImage = [[UIImage imageNamed:@"active_page_image.png"] retain]; inactiveImage = [[UIImage imageNamed:@"inactive_page_image.png"] retain]; return self; } -(void) updateDots { for (int i = 0; i < [self.subviews count]; i++) { UIImageView* dot = [self.subviews objectAtIndex:i]; if (i == self.currentPage) dot.image = activeImage; else dot.image = inactiveImage; } } -(void) setCurrentPage:(NSInteger)page { [super setCurrentPage:page]; [self updateDots]; }
然后在视图控制器中,我们就像普通的UIPageControl一样使用它
IBOutlet GrayPageControl* PageIndicator;
编辑:
在具有GrayPageControl的视图控制器中,我有一个链接到GrayPageControl.ValueChanged事件的IBAction。
-(IBAction) pageChanged:(id)sender { int page = PageIndicator.currentPage; // update the scroll view to the appropriate page CGRect frame = ImagesScroller.frame; frame.origin.x = frame.size.width * page; frame.origin.y = 0; [ImagesScroller scrollRectToVisible:frame animated:YES]; }
应用程序在iOS7中崩溃。 我有一个iOS 7的解决scheme:
崩溃的原因:
在iOS 7 [self.subViews objectAtIndex: i]
返回UIView
而不是UIImageView
和setImage
不是UIView
的属性和应用程序崩溃。 我使用下面的代码解决了我的问题。
检查子视图是UIView
(对于iOS7)还是UIImageView
(对于iOS6或更早版本)。 如果是UIView
我将添加UIImageView
作为该视图的子视图,并说它的工作,而不是崩溃..!
-(void) updateDots { for (int i = 0; i < [self.subviews count]; i++) { UIImageView * dot = [self imageViewForSubview: [self.subviews objectAtIndex: i]]; if (i == self.currentPage) dot.image = activeImage; else dot.image = inactiveImage; } } - (UIImageView *) imageViewForSubview: (UIView *) view { UIImageView * dot = nil; if ([view isKindOfClass: [UIView class]]) { for (UIView* subview in view.subviews) { if ([subview isKindOfClass:[UIImageView class]]) { dot = (UIImageView *)subview; break; } } if (dot == nil) { dot = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, view.frame.size.width, view.frame.size.height)]; [view addSubview:dot]; } } else { dot = (UIImageView *) view; } return dot; }
希望这个解决你的问题也适用于iOS7。 如果Anyponefind最佳的解决scheme,请评论。 🙂
快乐的编码
JWD的答案是要走的路。 但是,如果你只想改变颜色,为什么不这样做:
这种技术将只适用于iOS6.0及更高版本!
select你的UIPageControl去属性检查器。 田田。
或者,你也可以玩这两个属性:
pageIndicatorTintColor property currentPageIndicatorTintColor property
这很简单 我再次读到这个问题,以确保我没有错。 你真的只是想改变你的颜色吗? 那么是的。
你仍然坚持这个法律的点。 使用JWD技术的真棒点图片。
只需一行代码即可满足您的需求。 该示例设置为黑色。
pageControl.pageIndicatorTintColor = [UIColor blackColor];
DDPageControl是一个很好的替代品。 一探究竟!
您可以使用以下代码更改页面指示符色调颜色和当前页面指示符色调颜色:
pageControl.pageIndicatorTintColor = [UIColor orangeColor]; pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
如果你只是想改变点的颜色或定制它,你可以按照JWD的build议进行设置,但是也可以采取另一种方式:
#pragma mark - LifeCycle - (void)setCurrentPage:(NSInteger)page { [super setCurrentPage:page]; [self updateDots]; } #pragma mark - Private - (void)updateDots { for (int i = 0; i < [self.subviews count]; i++) { UIView* dot = [self.subviews objectAtIndex:i]; if (i == self.currentPage) { dot.backgroundColor = UIColorFromHEX(0x72E7DB); dot.layer.cornerRadius = dot.frame.size.height / 2; } else { dot.backgroundColor = UIColorFromHEX(0xFFFFFF); dot.layer.cornerRadius = dot.frame.size.height / 2 - 1; dot.layer.borderColor = UIColorFromHEX(0x72E7DB).CGColor; dot.layer.borderWidth = 1; } } }
结果你会得到类似的东西
还有macros:
#define UIColorFromHEX(hexValue) [UIColor colorWithRed:((float)((hexValue & 0xFF0000) >> 16))/255.0 green:((float)((hexValue & 0xFF00) >> 8))/255.0 blue:((float)(hexValue & 0xFF))/255.0 alpha:1.0]
最好也是最简单的方法是在AppDelegate.m的didFinishLaunchingWithOptions方法中添加以下代码行
UIPageControl *pageControl = [UIPageControl appearance]; pageControl.pageIndicatorTintColor = [UIColor lightGrayColor]; pageControl.currentPageIndicatorTintColor = [UIColor blackColor]; pageControl.backgroundColor = [UIColor whiteColor];
你可能想看看这个解决scheme在另一个stackoverflow问题 。
以下是使用自定义图像的相关答案(如果您灵活,可以使用图像而不是直接更改颜色)。
在UIPageControl的索引0处用UIPageControl的图像自定义点