基于SDCycleScrollView对里面的PageControl
进行样式自定义,自己想要什么样式就对PageControl
的currentPageDotImage
和pageDotImage
设置相应的图片就行,视图会根据图片自适应.
以下均在TAPageControl.m
中进行修改
修改流程:
- 改变整个PageControl的大小
找到- (CGSize)sizeForNumberOfPages:(NSInteger)pageCount
方法,修改PageControl的总宽高.
- 改变整个PageControl的大小
- (CGSize)sizeForNumberOfPages:(NSInteger)pageCount
{
return CGSizeMake((self.dotSize.width + self.spacingBetweenDots) * pageCount - self.spacingBetweenDots + self.currentDotImage.size.width, self.currentDotImage.size.height);
}
- 在
PageControl
滚动时重新计算里面的每个小圆点的位置.
每当视图滚动时都要调用- (void)changeActivity:(BOOL)active atIndex:(NSInteger)index
,修改此方法
- 在
- (void)changeActivity:(BOOL)active atIndex:(NSInteger)index
{
if (self.dotViewClass) {
TAAbstractDotView *abstractDotView = (TAAbstractDotView *)[self.dots objectAtIndex:index];
if ([abstractDotView respondsToSelector:@selector(changeActivityState:)]) {
[abstractDotView changeActivityState:active];
} else {
NSLog(@"Custom view : %@ must implement an 'changeActivityState' method or you can subclass %@ to help you.", self.dotViewClass, [TAAbstractDotView class]);
}
} else if (self.dotImage && self.currentDotImage) {
UIImageView *dotView = (UIImageView *)[self.dots objectAtIndex:index];
dotView.image = (active) ? self.currentDotImage : self.dotImage;
[self updateDotFrame:dotView atIndex:index];
for (int i = 0; i < self.numberOfPages; i++) {
UIImageView *tempDotView = (UIImageView *)[self.dots objectAtIndex:i];
[self updateDotFrame:tempDotView atIndex:i];
}
}
}
可以和源码作对比,会发现重新调用了- (void)updateDotFrame:(UIView *)dot atIndex:(NSInteger)index
,此方法是对每个小圆点的位置都重新赋值.
- (void)updateDotFrame:(UIView *)dot atIndex:(NSInteger)index
{
// Dots are always centered within view
CGFloat x = (self.dotSize.width + self.spacingBetweenDots) * index + ( (CGRectGetWidth(self.frame) - [self sizeForNumberOfPages:self.numberOfPages].width) / 2);
CGFloat y = (CGRectGetHeight(self.frame) - self.dotSize.height) / 2;
if (index > self.currentPage) {
x = (self.dotSize.width + self.spacingBetweenDots) * index + ( (CGRectGetWidth(self.frame) - [self sizeForNumberOfPages:self.numberOfPages].width) / 2) +self.currentDotImage.size.width - self.dotSize.width;
}
if (index == self.currentPage) {
dot.frame = CGRectMake(x, 0, self.currentDotImage.size.width, self.currentDotImage.size.height);
}else{
dot.frame = CGRectMake(x, y, self.dotSize.width, self.dotSize.height);
}
}
到此结束!
网友评论