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

 更新时间:2022年03月21日 11:22:12   作者:hzgisme  
这篇文章主要为大家详细介绍了iOS实现多个垂直滑动条并列视图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

本文实例为大家分享了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.png"];
? ? ? ? ? ??
? ? ? ? ? ? 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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。

相关文章

  • iOS Xcode创建文件时自动生成的注释方法

    iOS Xcode创建文件时自动生成的注释方法

    下面小编就为大家分享一篇iOS Xcode创建文件时自动生成的注释方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • IOS面试大全之常见算法

    IOS面试大全之常见算法

    之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和分类,这篇文章先给大家分享一下IOS中的常见算法,有需要的可以参考借鉴。
    2016-09-09
  • 2016年iOS公开可利用漏洞总结

    2016年iOS公开可利用漏洞总结

    本文总结了2016年比较严重的iOS漏洞(可用于远程代码执行或越狱),希望能够对大家移动安全方面的工作和研究带来一些帮助。
    2016-12-12
  • iOS 本地存储NSUserDefaults封装代码

    iOS 本地存储NSUserDefaults封装代码

    下面小编就为大家分享一篇iOS 本地存储NSUserDefaults封装代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • iOS实现二维码的扫描功能

    iOS实现二维码的扫描功能

    本文给大家介绍的是iOS 原生态API实现二维码的扫描功能,非常简单实用,有需要的小伙伴可以参考下。
    2015-07-07
  • iPhoneX 序列适配方案(小结)

    iPhoneX 序列适配方案(小结)

    这篇文章主要介绍了iPhoneX 序列适配方案(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • IOS中UIWebView、WKWebView之JS交互

    IOS中UIWebView、WKWebView之JS交互

    本篇文章主要介绍了IOS中UIWebView、WKWebView之JS交互,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • iOS开发技能weak和strong修饰符的规范使用详解

    iOS开发技能weak和strong修饰符的规范使用详解

    这篇文章主要为大家介绍了iOS开发技能weak和strong修饰符的规范使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • iOS中使用UIDatePicker制作时间选择器的实例教程

    iOS中使用UIDatePicker制作时间选择器的实例教程

    这篇文章主要介绍了iOS中使用UIDatePicker制作时间选择器的实例教程,实例中未选中的时间项目会讲解一个将其变透明的方法,非常给力,需要的朋友可以参考下
    2016-05-05
  • iOS实现手机获取验证码倒计时效果

    iOS实现手机获取验证码倒计时效果

    这篇文章主要为大家详细介绍了iOS实现手机获取验证码倒计时效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07

最新评论

?


http://www.vxiaotou.com