iOS开发之——自定义UIPageControl

1. 引子

  系统自带的UIPageControl只能进行颜色的更改,而形状、样式之类的都无法修改,所以自定义的需求呼之欲出。

2. 自定义PageControl步骤

2.1 新建类

新建一个类,继承自UIPageControl。

2.2 重写init方法

如果你想使用自定义的图片之类,可以重写
initWithFrame:(CGRect)frame方法,在这个方法里进行加载图片之类的初始化工作。

2.3 重写currentPageset方法

- (void)setCurrentPage:(NSInteger)currentPage是设置当前页的方法,我们可以在这个方法中进行自定义化操作。

- (void)setCurrentPage:(NSInteger)currentPage
{
[super setCurrentPage:currentPage];
//自定义加载
[self updateDots];
}
-(void)updateDots
{
for(int i = 0; i < [self.subviews count]; i++)
{
//通过对self.subviews进行打印可知其是UIView类
UIView *dot = [self.subviews objectAtIndex:i];
//可以对dot的大小和形状进行设置
dot.frame = CGRectMake(0, 0, 15, 3);
//当然也可以通过添加图片视图来设置自定义图片
// UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 7, 15, 3)];
//这里我只改变了dot的背景颜色
dot.backgroundColor = (i == self.currentPage) ? HIGHLITED_COLOR : NORMAL_COLOR;
//可以像这样加载自定义的图片
// imageView.image = (i == self.currentPage) ? _normalImage : _highlitedImage;
// [dot addSubview:imageView];
}
}

系统UIPageControl的dot,默认frame是:

(lldb) po dot.frame     
(origin = (x = -3.5, y = -3.5), size = (width = 7, height = 7))

2.4 运行查看即可

3. 继承UIView自定义UIPageControl

  其实,也可以直接通过继承UIView来实现自定义UIPageControl。类似UIPageControl,定义currentPagenumberOfPages等属性即可,然后依然是重写setCurrentPage的方法,最后也能实现,只不过这个方法定义出来的UIPageControl没有那些点击的作用,需要自己手动添加。