自定义一个PageControl

项目需求,需要一个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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 【Android 动画】 动画分类补间动画(Tween动画)帧动画(Frame 动画)属性动画(Property ...
    Rtia阅读 11,407评论 1 38
  • 师父经常会讲到一个话题,人只要自己改变了,一切都会随之而改变,并且你不要奢求让别人先去改变,你变了,别人跟着就变了...
    墨泉书院阅读 1,472评论 0 4
  • 陆. 小哥的存在让我对每一天都充满了期待,但小哥并不是每一天都会来这个跳蚤市场,他一周大概只有两天会在这里...
    尾巴捡起来阅读 1,274评论 0 0
  • 什么是命运,命运就是,当你知道,某些事你这么做不太好,也有人告诉你,这些是在你生命中,需要注意的地方。即使压制不住...
    守序型吉良吉影阅读 1,738评论 0 0
  • 账记录在很多人手上; 想改账本是不可能的,大家都遵守账本不可修改的共识; 想赖账也是不可能的,所有条约系统自动执行...
    我是水果党阅读 3,733评论 0 0

友情链接更多精彩内容