iOS 刻度尺 滑动标尺 横向标尺自定义控件

iOS 刻度尺 滑动标尺 横向标尺自定义控件_第1张图片
刻度尺.gif


写在前面

项目中有需求,多个地方用到了不用样式的刻度尺,找了一些别人写的,感觉都不太符合需求。就想用collectionView自己定义一个。然后将所有的参数实现自定义,来满足项目中多个地方的不同使用。

使用方法

用collectionView自定义实现的滑动刻度尺控件,其中颜色、大小位置、对齐方式等等都可按照自己的需求可进行自定义。
以下为主要的使用方式:

 -(void)setupTwoRuler{
    
    // 变速区域
    LZDividingRulerView * rulerView = [[LZDividingRulerView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 51)];
    //使用刻度尺常规模式
    rulerView.isCustomScalesValue = NO;
    //不显示刻度尺上的文案
    rulerView.isShowScaleText = NO;
    //显示刻度尺中当前值文案
    rulerView.isShowCurrentValue = YES;
    //最大值
    rulerView.maxValue = 1000000;
    //最小值
    rulerView.minValue = 100;
    //单元值
    rulerView.unitValue = 100;
    //默认值
    rulerView.defaultValue = 10100;
    //两个刻度文案之间的刻度格数
    rulerView.scalesCountBetweenScaleText = 5;
    
    //结束滚动
    [rulerView setDividingRulerDidEndScrollingBlock:^NSString *(CGFloat value) {
        return [NSString stringWithFormat:@"%.f",value];
    }];
    //滚动中
    [rulerView setDividingRulerDidScrollBlock:^NSString *(CGFloat value,CGPoint rulerContentOffset) {
        return [NSString stringWithFormat:@"%.f",value];
    }];
    [rulerView setFrame:CGRectMake(0, 160, CGRectGetWidth(self.view.frame), 52)];
    [rulerView updateRuler];
    [self.view addSubview:rulerView];
}

注意如果在修改参数,必须调用 [rulerView updateRuler]来刷新数据,否则不会生效。

本尺子主要分为两种类型来使用,通过isCustomScalesValue来控制:
第一种是知道最大值、最小值、单元值和默认值的类型,数值是根据单元刻度递增的。这种类型即传maxValue、minValue、unitValue、defaultValue来实现即可。
第二种是每个刻度格的数值变化为非递增关系的,比如是1/8,1/4,2/1,2,4,8这种格式。可以直接通过设定需要多少刻度格和默认选中的刻度格来实现。

然后讲下代码中的主要block回调:

主要分为三种回调,自定义刻度格式和常规刻度格式分别有三个回调:
常规格式的是:

//刻度尺在结束滑动时回调,参数为当前值,block返回值用于刻度尺中当前值显示,
//是否显示刻度尺中间当前值Label可用参数isShowCurrentValue控制
@property (nonatomic,copy)   NSString * (^dividingRulerDidEndScrollingBlock)(CGFloat value);
//刻度尺在滑动中回调,value为滑动中的当前值,offset为刻度尺的偏移量。block返回值用于刻度尺中当前值显示,
//是否显示刻度尺中间当前值Label可用参数isShowCurrentValue控制
@property (nonatomic,copy)   NSString *(^dividingRulerDidScrollBlock) (CGFloat value,CGPoint rulerContentOffset);
//刻度尺上文本显示内容回调,此回调的用途时,刻度尺里面只会给你返回当前的刻度格或者是当前值,然后让你自己来控制显示文本格式。 
//具体的间距几个刻度格来显示文本,可通过参数scalesCountBetweenLargeLine来控制。block返回值用于刻度尺中刻度上文案显示,
//是否显示刻度尺每个刻度上文案显示,可用参数isShowScaleText控制
@property (nonatomic,copy)   NSString *(^scaleTextFormatBlock)(CGFloat currentValue,NSInteger scaleIndex);

自定义刻度格式对应的三个分别是:

@property (nonatomic,copy)   NSString * (^customScaleTextFormatBlock)(CGFloat currentCalibrationIndex);
@property (nonatomic,copy)   NSString * (^dividingRulerCustomScaleDidEndScrollingBlock)(CGFloat index);
@property (nonatomic,copy)   NSString * (^dividingRulerCustomScaleDidScrollBlock)(CGFloat index);

最后

具体代码还是比较简单的,如果刻度尺的已有的功能无法满足你的需求,可直接在当前代码基础上进行修改。如果demo有帮助到你,不要吝啬你的star哦~
代码地址:https://github.com/FirstStepzz/DividingRuler.git

你可能感兴趣的:(iOS 刻度尺 滑动标尺 横向标尺自定义控件)