在UIPageControl的索引0处用UIPageControl的图像自定义点
我是一个新的ios编程学习者。 我试图用另一个例子和更多的问题在stackoverflowsearch,但这不是我的目标。 我想在UIPageControl的索引0处设置点的图像,类似于iPhonesearch主屏幕。 有没有办法做到这一点? 请用一些代码或其他有用的链接解释我。
提前致谢
试试这个链接:
回答GrayPageControl: – 有没有办法改变页面指示点颜色
这真的很好,可靠。我也使用这个代码。
你可能需要做更多的定制
-(void) updateDots { for (int i = 0; i < [self.subviews count]; i++) { UIImageView* dot = [self.subviews objectAtIndex:i]; if (i == self.currentPage) { if(i==0) { dot.image = [UIImage imageNamed:@"activesearch.png"]; } else { dot.image = activeImage; } } else { if(i==0) { dot.image = [UIImage imageNamed:@"inactivesearch.png"]; } else { dot.image = inactiveImage; } } } }
我find了解决这个问题的办法。 我知道这不是方式,但它将工作,直到iOS 8将在市场上推出。
崩溃的原因:
在iOS 7 [self.subViews objectAtIndex:我]返回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; }
另外,要清除已经存在的图像,请将现有指示器的色调设置为透明:
- (void)awakeFromNib { self.pageIndicatorTintColor = [UIColor clearColor]; self.currentPageIndicatorTintColor = [UIColor clearColor]; }
希望这将解决iOS 7的问题。
快乐的编码
只需更改UIPageControl页面指示器颜色与模式图像self.pageControl.currentPageIndicatorTintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"circle"]];
Swift 3代码的最佳编译方式是用位置标记replace UIPageControl
的第一个图标 :
import UIKit class LocationPageControl: UIPageControl { let locationArrow: UIImage = UIImage(named: "locationArrow")! let pageCircle: UIImage = UIImage(named: "pageCircle")! override var numberOfPages: Int { didSet { updateDots() } } override var currentPage: Int { didSet { updateDots() } } override func awakeFromNib() { super.awakeFromNib() self.pageIndicatorTintColor = UIColor.clear self.currentPageIndicatorTintColor = UIColor.clear self.clipsToBounds = false } func updateDots() { var i = 0 for view in self.subviews { var imageView = self.imageView(forSubview: view) if imageView == nil { if i == 0 { imageView = UIImageView(image: locationArrow) } else { imageView = UIImageView(image: pageCircle) } imageView!.center = view.center view.addSubview(imageView!) view.clipsToBounds = false } if i == self.currentPage { imageView!.alpha = 1.0 } else { imageView!.alpha = 0.5 } i += 1 } } fileprivate func imageView(forSubview view: UIView) -> UIImageView? { var dot: UIImageView? if let dotImageView = view as? UIImageView { dot = dotImageView } else { for foundView in view.subviews { if let imageView = foundView as? UIImageView { dot = imageView break } } } return dot } }
附图:
你只需要这样做:
((UIImageView *)[[yourPageControl subviews] objectAtIndex:0]).image=[UIImage imageNamed:@"search.png"];
Swift 3.0的更新…你知道如果你接受规定的风险是可以的:“修改现有控件的子视图是脆弱的”。
import UIKit class CustomImagePageControl: UIPageControl { let activeImage:UIImage = UIImage(named: "SelectedPage")! let inactiveImage:UIImage = UIImage(named: "UnselectedPage")! override func awakeFromNib() { super.awakeFromNib() self.pageIndicatorTintColor = UIColor.clear self.currentPageIndicatorTintColor = UIColor.clear self.clipsToBounds = false } func updateDots() { var i = 0 for view in self.subviews { if let imageView = self.imageForSubview(view) { if i == self.currentPage { imageView.image = self.activeImage } else { imageView.image = self.inactiveImage } i = i + 1 } else { var dotImage = self.inactiveImage if i == self.currentPage { dotImage = self.activeImage } view.clipsToBounds = false view.addSubview(UIImageView(image:dotImage)) i = i + 1 } } } fileprivate func imageForSubview(_ view:UIView) -> UIImageView? { var dot:UIImageView? if let dotImageView = view as? UIImageView { dot = dotImageView } else { for foundView in view.subviews { if let imageView = foundView as? UIImageView { dot = imageView break } } } return dot } }
我想为此,你需要定制整个UIPageControl
。 请在下面的链接find更多
-
我怎样才能改变UIPageControl的分页点的颜色?
-
http://iphoneappcode.blogspot.in/2012/03/custom-uipagecontrol.html
从iProgrammer的答案
如果你想隐藏原点
- (UIImageView *)imageViewForSubview:(UIView *)view { UIImageView * dot = nil; [view setBackgroundColor:[UIColor clearColor]]; << add this line