自定義一個(gè)PageControl

項(xiàng)目需求,需要一個(gè)PageControl,dot里是1,2,3,4數(shù)字的,隨便寫(xiě)了一個(gè),有一些坑沒(méi)填完,用的時(shí)候注意就沒(méi)什么問(wèn)題。

#import <UIKit/UIKit.h>

@interface CZYPageControl : UIView

//pageDot之間的間隔
@property(nonatomic,assign)float spacing;
//未選中的dot尺寸
@property(nonatomic,assign)float minDotValue;
//選中的dot尺寸
@property(nonatomic,assign)float maxDotValue;
//未選中dot的背景顏色
@property(nonatomic,strong)UIColor *NoSelectedDotBackColor;
//選中dot的背景顏色
@property(nonatomic,strong)UIColor *SelectedDotBackColor;
//dot中間字體的顏色
@property(nonatomic,strong)UIColor *fontColor;
//scrol是所關(guān)聯(lián)的那個(gè)UIScrollView
-(instancetype)CpageInitWithFrame:(CGRect)frame pageNumber:(NSInteger)pageNumber controllingScrol:(UIScrollView *)scrol;
@end

#import "CZYPageControl.h"
@interface CZYPageControl()
@property(nonatomic,assign)NSInteger pageNumber;
@property(nonatomic,strong)UIScrollView *scrol;

@end
@implementation CZYPageControl
-(instancetype)CpageInitWithFrame:(CGRect)frame pageNumber:(NSInteger)pageNumber controllingScrol:(UIScrollView *)scrol
{
    if ([super initWithFrame:frame]) {
        _pageNumber=pageNumber;
        _scrol=scrol;
        [self setDefault];
    }
    return self;
}
//默認(rèn)設(shè)置
-(void)setDefault
{
    _spacing=11.0;
    _minDotValue=22.0;
    _maxDotValue=32.0;
    _NoSelectedDotBackColor=[UIColor grayColor];
    _SelectedDotBackColor=GREEN;
    _fontColor=[UIColor whiteColor];
    [_scrol addObserver:self forKeyPath:@"contentOffset" options:(NSKeyValueObservingOptionNew) context:nil];
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    
    CGPoint newOffset = [change[@"new"] CGPointValue];
    NSLog(@"%lf",newOffset.x);
    int index=(newOffset.x) / ([UIScreen mainScreen].bounds.size.width);
    for (int i=0; i<_pageNumber; i++) {
        [self viewWithTag:10+i].hidden=YES;
    }
    [self viewWithTag:10+index].hidden=NO;
    while (newOffset.x>WIDTH) {
        newOffset.x-=WIDTH;
    }
    
    
}

-(void)layoutSubviews
{
    [self creatUI];
    [_scrol setContentOffset:CGPointMake(0, 0)];
}
-(void)creatUI
{
    
    for (int i=0; i<_pageNumber; i++) {
        UILabel *dotLabel=[[UILabel alloc]initWithFrame:CGRectMake(self.frame.size.width/2-((_pageNumber*_minDotValue+(_pageNumber-1)*_spacing)/2)+i*(_minDotValue+_spacing) , self.frame.size.height/2-_minDotValue/2, _minDotValue, _minDotValue)];
        dotLabel.tag=i;
        dotLabel.layer.cornerRadius=_minDotValue/2;
        dotLabel.layer.masksToBounds=YES;
        dotLabel.backgroundColor=_NoSelectedDotBackColor;
        dotLabel.font=[UIFont fontWithName:@"Lato-Regular" size:13];
        dotLabel.textAlignment=NSTextAlignmentCenter;
        dotLabel.textColor=_fontColor;
        dotLabel.text=[NSString stringWithFormat:@"%d",i+1];
        [self addSubview:dotLabel];
        
        
        
        UILabel *selectdotLabel=[[UILabel alloc]init];
        selectdotLabel.center=CGPointMake(dotLabel.center.x, dotLabel.center.y);
        selectdotLabel.bounds=CGRectMake(0, 0, _maxDotValue, _maxDotValue);
        selectdotLabel.tag=i+10;
        selectdotLabel.layer.cornerRadius=_maxDotValue/2;
        selectdotLabel.layer.masksToBounds=YES;
        selectdotLabel.backgroundColor=_SelectedDotBackColor;
        selectdotLabel.font=[UIFont fontWithName:@"Lato-Regular" size:13];
        selectdotLabel.textAlignment=NSTextAlignmentCenter;
        selectdotLabel.textColor=_fontColor;
        selectdotLabel.text=[NSString stringWithFormat:@"%d",i+1];
        [self addSubview:selectdotLabel];
        selectdotLabel.hidden=YES;
        
        
        
    }
    
}
-(void)dealloc
{
    [_scrol removeObserver:self forKeyPath:@"contentOffset"];
}
@end

初始化方法只能這一種,使用其他初始化方式的情況沒(méi)有處理完,動(dòng)畫(huà)也是很簡(jiǎn)單,后面有需要在加吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 【Android 動(dòng)畫(huà)】 動(dòng)畫(huà)分類補(bǔ)間動(dòng)畫(huà)(Tween動(dòng)畫(huà))幀動(dòng)畫(huà)(Frame 動(dòng)畫(huà))屬性動(dòng)畫(huà)(Property ...
    Rtia閱讀 6,248評(píng)論 1 38
  • 師父經(jīng)常會(huì)講到一個(gè)話題,人只要自己改變了,一切都會(huì)隨之而改變,并且你不要奢求讓別人先去改變,你變了,別人跟著就變了...
    墨泉書(shū)院閱讀 174評(píng)論 0 4
  • 陸. 小哥的存在讓我對(duì)每一天都充滿了期待,但小哥并不是每一天都會(huì)來(lái)這個(gè)跳蚤市場(chǎng),他一周大概只有兩天會(huì)在這里...
    尾巴撿起來(lái)閱讀 135評(píng)論 0 0
  • 什么是命運(yùn),命運(yùn)就是,當(dāng)你知道,某些事你這么做不太好,也有人告訴你,這些是在你生命中,需要注意的地方。即使壓制不住...
    守序型吉良吉影閱讀 236評(píng)論 0 0
  • 賬記錄在很多人手上; 想改賬本是不可能的,大家都遵守賬本不可修改的共識(shí); 想賴賬也是不可能的,所有條約系統(tǒng)自動(dòng)執(zhí)行...
    我是水果黨閱讀 622評(píng)論 0 0