<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了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
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45