在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更多

  1. 我怎样才能改变UIPageControl的分页点的颜色?

  2. http://iphoneappcode.blogspot.in/2012/03/custom-uipagecontrol.html

从iProgrammer的答案
如果你想隐藏原点

 - (UIImageView *)imageViewForSubview:(UIView *)view { UIImageView * dot = nil; [view setBackgroundColor:[UIColor clearColor]]; << add this line