iOS实现多个垂直滑动条并列视图

iOS实现多个垂直滑动条并列视图

本文实例为大家分享了iOS实现多个垂直滑动条并列视图的具体代码,供大家参考,具体内容如下

上一篇文章我们实现了一个垂直滑动条的类 (VerticalSlider),用来满足垂直滑动的需求。那么这篇文章我们来把多个垂直滑动条放到一起,可以在一个视图上并排多个垂直滑动条,也算是一个实际应用的场景。

需求:

同时展示多个垂直滑动条

每个滑动条高度和视图高度相同,随视图高度自动变化

所有滑动条宽度相同,宽度为视图宽度除以滑动条个数

根据提供的滑动条的值更新视图

传递滑动条的索引和值

需求还是比较简单的,自定义一个视图 (UIView) 就可以实现:

VerticalSliderDimmingView.h

// //  VerticalSliderDimmingView.h //  // //  Created by huang zhengguo on 2019/8/30. //  Copyright © 2019 huang zhengguo. All rights reserved. // #import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGIN typedef void (^SliderValueBlock) (NSInteger,float); @interface VerticalSliderDimmingView : UIView /**  * 初始化手动调光界面  *  * @param frame 大小  * @param sliderCount 滑动条个数  * @param channelColors 滑动条颜色  * @param sliderTitle 滑动条标题  * @param sliderValue 滑动条值  *  */ - (instancetype)initWithFrame:(CGRect)frame sliderCount:(NSInteger)sliderCount channelColors:(NSArray *)channelColors sliderTitles:(NSArray *)sliderTitle sliderValues:(NSArray *)sliderValue; /**  * 更新滑动条  *  * @param sliderValueArray 所有通道颜色值  *  */ - (void)updateSliderViewWith:(NSArray *)sliderValueArray; /**  * 更新滑动条  *  * @param colorPercentValueArray 所有通道颜色百分比  *  */ - (void)updateManualDimmingViewWithColorPercent:(NSArray *)colorPercentValueArray; // 滑动条滑动 @property(nonatomic, copy) SliderValueBlock colorDimmingBlock; // 滑动条结束滑动 @property(nonatomic, copy) SliderValueBlock colorDimmingEndBlock; @end NS_ASSUME_NONNULL_END

VerticalSliderDimmingView.m

// //  VerticalSliderDimmingView.m //  // //  Created by huang zhengguo on 2019/8/30. //  Copyright © 2019. All rights reserved. // #import "VerticalSliderDimmingView.h" #import "VerticalSlider.h" @interface VerticalSliderDimmingView() @property (strong, nonatomic) NSMutableArray *colorSliderArray; @end @implementation VerticalSliderDimmingView - (NSMutableArray *)colorSliderArray {     if (!_colorSliderArray) {         _colorSliderArray = [NSMutableArray array];     }     return _colorSliderArray; } - (instancetype)initWithFrame:(CGRect)frame sliderCount:(NSInteger)sliderCount channelColors:(NSArray *)channelColors sliderTitles:(NSArray *)sliderTitle sliderValues:(NSArray *)sliderValue {     if (self = [super initWithFrame:frame]) {         self.translatesAutoresizingMaskIntoConstraints = NO;         VerticalSlider *lastSlider = nil;         [self.colorSliderArray removeAllObjects];         for (int i=0; i<sliderCount; i++) {             VerticalSlider *slider = [[VerticalSlider alloc] initWithFrame:CGRectZero title:[sliderTitle objectAtIndex:i] progressColor:[channelColors objectAtIndex:i] thumImage:@"control.webp"];             slider.minimumValue = MIN_LIGHT_VALUE;             slider.maximumValue = MAX_LIGHT_VALUE;             slider.translatesAutoresizingMaskIntoConstraints = NO;             slider.tag = 20000 + i;             slider.value = [sliderValue[i] integerValue] / 1000.0;             slider.passValue = ^(float colorValue) {                 if (self.colorDimmingBlock) {                     self.colorDimmingBlock(slider.tag - 20000, colorValue * MAX_LIGHT_VALUE);                 }             };             slider.passEndValue = ^(float colorValue) {                 // 传递结束滑动时的颜色值                 if (self.colorDimmingEndBlock) {                     self.colorDimmingEndBlock(slider.tag - 20000, colorValue * MAX_LIGHT_VALUE);                 }             };             [self addSubview:slider];             if (i == 0) {                 [self setSliderConstraintsWithItem:slider toItem:self toItem:self isFirst:YES isLast:NO];             } else {                 [self setSliderConstraintsWithItem:slider toItem:self toItem:lastSlider isFirst:NO isLast:NO];             }             // 处理最后一个             if (i == sliderCount - 1) {                 [self setSliderConstraintsWithItem:slider toItem:self toItem:lastSlider isFirst:NO isLast:YES];             }             lastSlider = slider;             [self.colorSliderArray addObject:slider];         }     }     return self; } - (void)sliderTouchUpInSideAction:(UISlider *)slider {     // 传递d结束滑动时的颜色值     if (self.colorDimmingEndBlock) {         self.colorDimmingEndBlock(slider.tag - 20000, slider.value);     } } #pragma mark --- 根据数据更新视图 - (void)updateSliderViewWith:(NSArray *)sliderValueArray {     // 刷新滑动条     for (int i=0;i<self.colorSliderArray.count;i++) {         VerticalSlider *slider = [self.colorSliderArray objectAtIndex:i];         slider.value = [sliderValueArray[i] floatValue] / 1000.0;     } } #pragma mark --- 根据百分比更新视图 - (void)updateManualDimmingViewWithColorPercent:(NSArray *)colorPercentValueArray {     for (int i=0; i<colorPercentValueArray.count; i++) {         UISlider *slider = [self.colorSliderArray objectAtIndex:i];         slider.value = (float)[[colorPercentValueArray objectAtIndex:i] floatValue] * 10;     } } #pragma mark --- 添加滑动条约束 - (void)setSliderConstraintsWithItem:(nullable id)view1 toItem:(nullable id)view2 toItem:(nullable id)view3 isFirst:(BOOL)isFirst isLast:(BOOL)isLast {     NSLayoutConstraint *sliderTopLayoutConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0];     NSLayoutConstraint *sliderLeadingLayoutConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:view3 attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:0.0];     NSLayoutConstraint *sliderBottomLayoutConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];     if (!isFirst) {         NSLayoutConstraint *sliderWithLayoutConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:view3 attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0.0];         [self addConstraint:sliderWithLayoutConstraint];     } else {         sliderLeadingLayoutConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0.0];     }     // 最后一个     if (isLast) {         NSLayoutConstraint *sliderTrailingLayoutConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:0.0];         [self addConstraint:sliderTrailingLayoutConstraint];     }     [self addConstraints:@[sliderTopLayoutConstraint, sliderLeadingLayoutConstraint, sliderBottomLayoutConstraint]]; } /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect {     // Drawing code } */ @end

推荐阅读

    计算机主板BIOS设置详细-BIOS知识

    计算机主板BIOS设置详细-BIOS知识,,什么是电脑BIOS,一般电脑主板已经设置完毕后,电脑就开始按del键进入BIOS。系统启动BIOS,即微机的基本输入

    cad图形显示快捷键|cad视图显示快捷键

    cad图形显示快捷键|cad视图显示快捷键,,1. cad视图显示快捷键首先打开【CAD软件】,点击【视图】,轻点【重生成】,CAD中的重生成即刷新功能,或

    如何设置计算机视图视图的统一视图

    如何设置计算机视图视图的统一视图,,不知道你是否有这样的使用电脑经验,电脑在不同的文件夹打开,有时这个文件夹是用来查看列表的方式,但是当

    6s 32G能升级到ios14吗

    6s 32G能升级到ios14吗,手机,系统,6s 32G能升级到ios14吗可以,但是ios14更新以后会占用10左右储存,还有系统没有完全汉化,如果没接受,也就可以

    三常见BIOS故障排除解决方案

    三常见BIOS故障排除解决方案,,笔记本电脑如何长时间出现黑屏为什么为什么如何删除和修改旧IBM笔记本电脑BIOS设置中的密码我想你会与这些

    联想bios设置图解|联想bios设置方法

    联想bios设置图解|联想bios设置方法,,联想bios设置方法1.首先我们打开电脑,当开机标识出现或者电脑开机时,连续使用键盘“DEL”进入BIOS设置

    coc进度转电脑ios|coc快速升级

    coc进度转电脑ios|coc快速升级,,1. coc快速升级1、 首先,你要知道并学会“刷墙”。它的意思是尽量给城墙多升升级,免得你防御很强,但