iOS自定义PageControl原点

前言

UIPageContro经常用于轮播图,系统提供的组件基本能实现相关功能,不过有时,我们需要对圆点的形状进行自定义,比如下面这种:

思路

每次currentPage选中时,都会调用layoutSubviews在重置圆点状态,所以在layoutSubviews中进行形状定制;

注意:currentPage选中会调用setCurrentPage方法,但如果你在这个方法中定制形状,接着系统还是会调用layoutSubviews,会被系统方法覆盖掉frame的origin信息。

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
- (void)updatePage {
for (NSUInteger subviewIndex = 0; subviewIndex < [self.subviews count]; subviewIndex++) {
UIImageView *subview = [self.subviews objectAtIndex:subviewIndex];
CGSize size = subview.frame.size;
CGFloat originX = CGRectGetMinX(subview.frame);
if (self.currentPage == subviewIndex) {
size.width = xx;
}else if(self.currentPage < subviewIndex){
originX = (double)subviewIndex/[self.subviews count]*CGRectGetWidth(self.frame)+xx;
}
[subview setFrame:CGRectMake(originX, CGRectGetMinY(subview.frame), size.width, size.height)];
}
}
  Total:    No.