iOS自定義UIPageControl,作一個漂亮的滾動視圖


寫一些須要注意的事項:

pagecontrol的frame設置時候儘可能用bound,不然會出現不可預料問題數組

pagecontrol的subviews是個view的數組,而不是UIImageView(網上的資料全說是UIImageView,已是以前版本了,能夠log一下看看)dom


自定義PageController

@interface DiyPageController : UIPageControl {
    UIImage * _imagePageNomal;
    UIImage * _imagePageHighlited;
}
- (id)initWithFrame:(CGRect)frame;
@end

@implementation DiyPageController
- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    _imagePageNomal = [UIImage imageNamed:@"ADPicSlideIcon"];
    _imagePageHighlited = [UIImage imageNamed:@"ADPicSlideIconActive"];
    return self;
}
- (void)setCurrentPage:(NSInteger)currentPage {
    [super setCurrentPage:currentPage];
    [self updateDots];
}
-(void) updateDots {
    for (int i = 0; i < [self.subviews count]; i++) {
        UIView * dot = [self.subviews objectAtIndex:i];
        UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(-2, -2, 10, 10)];

//        CGSize size;
//        size.height = 1;     //自定義圓點的大小
//        size.width = 1;      //自定義圓點的大小,下邊註釋set方法是設置view的frame
//        [dot setFrame:CGRectMake(dot.frame.origin.x, dot.frame.origin.y, size.width, size.width)];
        imageView.image = (i == self.currentPage) ? _imagePageHighlited : _imagePageNomal;
        [dot addSubview:imageView];

        
    }
}

ide

添加pageController

- (void)createPageController{
    //實例化頁面管理
    _pageController = [[DiyPageController alloc] initWithFrame:CGRectMake(0, 60, self.bounds.size.width, 20)];
//    _pageController.center = CGPointMake(ScreenWidth / 2, 60);
    //一共有多少頁(滾動循環多了兩張)
    _pageController.numberOfPages = 3;
    //設置選中頁
    _pageController.currentPage = 0;
    //設置點擊換頁碼   默認no(切換)
    _pageController.defersCurrentPageDisplay = NO;
    //設置背景色
    //    _pageController.backgroundColor = RandomColor;
    
    //給pageControl添加行爲
//    [_pageController addTarget:self action:@selector(pageNumberChanged:) forControlEvents:UIControlEventValueChanged];
//    [_pageController addTarget:self action:@selector(pageControlContinusScroll:) forControlEvents:UIControlEventTouchUpInside];
    
    [self addSubview:_pageController];
}

spa

設置scroll的代理,更新顯示

#pragma mark scrollViewDelegate
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
    _pageController.currentPage = _scrollView.contentOffset.x / ScreenWidth;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    _pageController.currentPage = _scrollView.contentOffset.x / ScreenWidth;
}
代理

經過設置着兩個代理方法,保證不管是自動滑動仍是手動滑動都將會更新pagecontrol
get

相關文章
相關標籤/搜索