美文网首页
自定义一个PageControl

自定义一个PageControl

作者: 百有异用是書生 | 来源:发表于2017-01-05 20:59 被阅读0次

    项目需求,需要一个PageControl,dot里是1,2,3,4数字的,随便写了一个,有一些坑没填完,用的时候注意就没什么问题。

    #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是所关联的那个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;
    }
    //默认设置
    -(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
    
    

    初始化方法只能这一种,使用其他初始化方式的情况没有处理完,动画也是很简单,后面有需要在加吧

    相关文章

      网友评论

          本文标题:自定义一个PageControl

          本文链接:https://www.haomeiwen.com/subject/uwazvttx.html