亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS實現雙向滑動條效果

2020-07-26 03:25:08
字體:
來源:轉載
供稿:網友

最近做項目,碰到一種雙向滑動條,自己實現了一下,隨便寫一下思路,方便以后開發,避免重復寫代碼,以后粘貼就行了。封裝了一下,代碼如下:

#import <UIKit/UIKit.h>typedef NSString* (^HLDoubleSlideViewSwitchStrBock)(CGFloat count);@interface HLDoubleSlideView : UIView@property(nonatomic,assign)CGFloat maxValue;@property(nonatomic,assign)CGFloat minValue;@property(nonatomic,assign)CGFloat currentLeftValue;@property(nonatomic,assign)CGFloat currentRightValue;//格式化顯示文本@property(nonatomic,copy)HLDoubleSlideViewSwitchStrBock block;@end

源文件如下:

#import "HLDoubleSlideView.h"#import "UIView+Add.h"@interface HLDoubleSlideView ()<UIGestureRecognizerDelegate>@property(nonatomic,strong)UIImageView *leftImageView;@property(nonatomic,strong)UIImageView *rightImageView;@property(nonatomic,strong)UILabel *leftLabel;@property(nonatomic,strong)UILabel *rightLabel;@property(nonatomic,strong)UIButton *leftBtn;@property(nonatomic,strong)UIButton *rightBtn;@property(nonatomic,assign)CGFloat leftBtnOrgx;@property(nonatomic,assign)CGFloat rightBtnOrgx;@end@implementation HLDoubleSlideView-(id)init{ if (self = [super init]) {  [self setupUI]; } return self;}-(void)setupUI{ _leftImageView = [[UIImageView alloc] init]; _leftImageView.image = [UIImage imageNamed:@"progressImage"]; _leftImageView.frame = CGRectMake(0, 5, 60, 40); [self addSubview:_leftImageView]; _leftLabel = [[UILabel alloc] initWithFrame:_leftImageView.bounds]; _leftLabel.backgroundColor = [UIColor clearColor]; _leftLabel.font = [UIFont systemFontOfSize:13]; _leftLabel.textAlignment = NSTextAlignmentCenter; _leftLabel.textColor = [UIColor whiteColor]; [_leftImageView addSubview:_leftLabel]; _rightImageView = [[UIImageView alloc] init]; _rightImageView.image = [UIImage imageNamed:@"progressImage"]; _rightImageView.frame = CGRectMake(0, 5, 60, 40); [self addSubview:_rightImageView]; _rightLabel = [[UILabel alloc] initWithFrame:_rightImageView.bounds]; _rightLabel.backgroundColor = [UIColor clearColor]; _rightLabel.font = [UIFont systemFontOfSize:13]; _rightLabel.textAlignment = NSTextAlignmentCenter; _rightLabel.textColor = [UIColor whiteColor]; [_rightImageView addSubview:_rightLabel]; _leftBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _leftBtn.frame = CGRectMake(0, 50, 20,20); _leftBtn.backgroundColor = [UIColor blueColor]; _leftBtn.layer.cornerRadius = 10; [self addSubview:_leftBtn]; UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureAction:)]; panGesture.delegate = self; [_leftBtn addGestureRecognizer:panGesture]; _leftImageView.centerX = _leftBtn.centerX; _rightBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _rightBtn.backgroundColor = [UIColor blueColor]; _rightBtn.frame = CGRectMake(240, 50, 20, 20); _rightBtn.layer.cornerRadius = 10; panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureAction:)]; panGesture.delegate = self; [_rightBtn addGestureRecognizer:panGesture]; _rightImageView.centerX = _rightBtn.centerX; [self addSubview:_rightBtn];}- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ return YES;}-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ NSLog(@"doubleView hitTest"); return [super hitTest:point withEvent:event];}-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ NSLog(@"began"); [super touchesBegan:touches withEvent:event];}-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ NSLog(@"move"); [super touchesMoved:touches withEvent:event];}-(void)layoutSubviews{ CGFloat centenX = (_currentLeftValue - _minValue) * (self.bounds.size.width - 20)/(_maxValue - _minValue) + 10; _leftBtn.centerX = centenX; if (_currentLeftValue != 0) {  CGFloat centenX = (_currentRightValue - _minValue) * (self.bounds.size.width - 20) / (_maxValue - _minValue) + 10;  _rightBtn.centerX = centenX; } else {  _rightBtn.centerX = self.bounds.size.width - 10; } _leftImageView.centerX = _leftBtn.centerX; _rightImageView.centerX = _rightBtn.centerX; if (_block) {  _leftLabel.text = _block(_currentLeftValue);  _rightLabel.text = _block(_currentRightValue); }}-(void)tapGestureAction:(UIPanGestureRecognizer*)panGesture{ UIView *vw = panGesture.view; CGPoint transPoint = [panGesture translationInView:self]; NSLog(@"x:%lf,y:%lf",transPoint.x,transPoint.y); switch (panGesture.state) {  case UIGestureRecognizerStateBegan:  {   if ([vw isEqual:_leftBtn])   {    _leftBtnOrgx = _leftBtn.orgX;    NSLog(@"拖拽左邊按鈕");   }   else if([vw isEqual:_rightBtn])   {    _rightBtnOrgx = _rightBtn.orgX;    NSLog(@"拖拽右邊按鈕");   }  }   break;  case UIGestureRecognizerStateChanged:  {   if ([vw isEqual:_leftBtn])   {    CGFloat orginX = _leftBtn.orgX;    _leftBtn.orgX = _leftBtnOrgx + transPoint.x;    if (_leftBtn.orgX < 0) {     _leftBtn.orgX = 0;    }    else if(_leftBtn.orgX >= _rightBtn.orgX - 20)    {     _leftBtn.orgX = orginX;    }     _leftImageView.centerX = _leftBtn.centerX;   }   else if([vw isEqual:_rightBtn])   {    CGFloat orginX = _rightBtn.orgX;    _rightBtn.orgX = _rightBtnOrgx + transPoint.x;    if (_rightBtn.orgX >= self.bounds.size.width - 20) {     _rightBtn.orgX = self.bounds.size.width - 20;    }    else if(_rightBtn.orgX <= _leftBtn.orgX + 20)    {     _rightBtn.orgX = orginX;    }     _rightImageView.centerX = _rightBtn.centerX;   }  }   break;  case UIGestureRecognizerStateEnded:  {  }   break;  default:   break; } _currentLeftValue = _minValue + (_maxValue - _minValue) * ((_leftBtn.centerX - 10) / (self.bounds.size.width - 20)); _currentRightValue = _minValue + (_maxValue - _minValue) * ((_rightBtn.centerX - 10) / (self.bounds.size.width - 20)); if (_block) {  _leftLabel.text = _block(_currentLeftValue);  _rightLabel.text = _block(_currentRightValue); } NSLog(@"leftValue:%lf,rightValue:%lf",_currentLeftValue,_currentRightValue); [self setNeedsDisplay];}-(void)setCurrentLeftValue:(CGFloat)currentLeftValue{ _currentLeftValue = currentLeftValue; CGFloat centenX = (currentLeftValue - _minValue) * (self.bounds.size.width - 20)/(_maxValue - _minValue) + 10; _leftBtn.centerX = centenX; [self setNeedsDisplay];}-(void)setCurrentRightValue:(CGFloat)currentRightValue{ _currentRightValue = currentRightValue; CGFloat centenX = (_currentRightValue - _minValue) * (self.bounds.size.width - 20) / (_maxValue - _minValue) + 10; _rightBtn.centerX = centenX; [self setNeedsDisplay];}-(void)drawRect:(CGRect)rect{ CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetLineCap(context, kCGLineCapRound); CGContextSetLineWidth(context, 3); [[UIColor grayColor] setStroke]; CGContextMoveToPoint(context, 0, 60); CGContextAddLineToPoint(context, self.bounds.size.width, 60); CGContextStrokePath(context); [[UIColor redColor] setStroke]; CGContextMoveToPoint(context, _leftBtn.orgX + 10, 60); CGContextAddLineToPoint(context, _rightBtn.orgX,60); CGContextStrokePath(context);}@end


使用如下:

 HLDoubleSlideView *doubleSlideView = [[HLDoubleSlideView alloc] init]; doubleSlideView.backgroundColor = [UIColor whiteColor];//HLColor(244, 244, 244); doubleSlideView.minValue = 1000; doubleSlideView.maxValue = 10000; doubleSlideView.block = ^NSString*(CGFloat count) {  return [NSString stringWithFormat:@"%.0f元",count]; }; [self.view addSubview:doubleSlideView]; doubleSlideView.frame = CGRectMake(60, 64, 250, 80); doubleSlideView.currentLeftValue = 1200; doubleSlideView.currentRightValue = 10000;

運行結果如下:


demo:https://github.com/jiangtaidi/HLDoubleSlideView.git

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产999精品久久久影片官网| 日韩精品一二三四区| 奇米4444一区二区三区| 国产亚洲成av人片在线观看桃| 久久男人av资源网站| 国产成人精品国内自产拍免费看| 57pao成人永久免费视频| 久久久久久97| 91香蕉嫩草神马影院在线观看| 国产自产女人91一区在线观看| 亚洲精品xxxx| 久久久久久中文| 亚洲аv电影天堂网| 美女撒尿一区二区三区| 庆余年2免费日韩剧观看大牛| 久久精品视频网站| 午夜精品久久久久久久男人的天堂| 欧美性20hd另类| 国产精品扒开腿做爽爽爽的视频| 日韩精品中文字幕在线观看| 一区二区三区视频在线| 亚洲成人黄色网址| 米奇精品一区二区三区在线观看| 日韩亚洲综合在线| 精品亚洲aⅴ在线观看| 日韩中文视频免费在线观看| 国产福利精品av综合导导航| 国产精品一区二区三区久久| 成人福利网站在线观看11| 欧美成人免费va影院高清| 亚洲人成免费电影| 久久亚洲春色中文字幕| 国产精品久久久久久久美男| 亚洲第一精品自拍| 九九精品在线视频| 中文字幕日韩在线播放| 欧美最猛性xxxxx(亚洲精品)| 久久香蕉精品香蕉| 国产精品久久久久久久久久新婚| 欧美午夜丰满在线18影院| 久久久久久久久电影| 久久精品国产一区| 亚洲精品第一国产综合精品| 奇门遁甲1982国语版免费观看高清| 日韩欧美亚洲综合| 日韩在线视频线视频免费网站| 欧美另类第一页| 高潮白浆女日韩av免费看| 亚洲va欧美va在线观看| 久久久噜噜噜久噜久久| 欧美日韩亚洲成人| 成人黄色av播放免费| 日韩欧美在线视频| 成人午夜小视频| 国产精品久久久久久久久久| 亚洲欧美日韩天堂一区二区| 色黄久久久久久| 国产一区私人高清影院| 国产日韩av在线播放| 亚洲视频视频在线| 最新亚洲国产精品| 亚洲成人久久电影| 成人久久久久久久| 韩国美女主播一区| 国产成人高潮免费观看精品| 亚洲国产精品yw在线观看| 欧美成人精品在线播放| 欧美激情三级免费| 九九热这里只有在线精品视| 日韩欧美一区二区三区久久| 久久久午夜视频| 亚洲娇小xxxx欧美娇小| 国产区亚洲区欧美区| 日韩在线资源网| 国产精品美女在线观看| 欧美在线视频观看| 2019中文字幕免费视频| 欧美理论电影网| 九九九热精品免费视频观看网站| 欧美大秀在线观看| 日韩福利伦理影院免费| 欧美俄罗斯乱妇| 夜夜嗨av色一区二区不卡| 亚洲精品mp4| 日日摸夜夜添一区| 日韩国产欧美区| 中文字幕在线精品| 午夜欧美不卡精品aaaaa| 日日狠狠久久偷偷四色综合免费| 国产成人精品电影| 中文字幕少妇一区二区三区| 欧美又大又硬又粗bbbbb| 日韩乱码在线视频| 国产日产欧美精品| 91精品国产综合久久久久久蜜臀| 日韩av网站导航| 午夜精品久久久久久久久久久久| 欧美日韩国产综合视频在线观看中文| 久久色精品视频| 国产精品私拍pans大尺度在线| 91精品在线观| 日韩精品视频免费专区在线播放| 日产日韩在线亚洲欧美| 日本aⅴ大伊香蕉精品视频| 91在线高清视频| 亚洲一级黄色av| 久久久久亚洲精品国产| 免费av一区二区| 久久视频这里只有精品| 91高清免费视频| 中文字幕一区日韩电影| 欧美性色视频在线| 日韩在线观看视频免费| 最近2019好看的中文字幕免费| 精品久久久久久中文字幕| 亚洲欧美激情一区| 国产精品久久久久影院日本| 日韩一中文字幕| 亚洲社区在线观看| 一区二区三区四区在线观看视频| 日韩精品www| 久久视频中文字幕| 久久精品最新地址| 欧美激情视频三区| 成人福利在线观看| 精品夜色国产国偷在线| 97av在线影院| 国产精品国产三级国产aⅴ浪潮| 亚洲欧美在线一区| 国产一区二区三区四区福利| 欧美激情在线一区| 国产精品久久久久久久美男| 日韩一区二区欧美| 久久97精品久久久久久久不卡| 91av在线影院| 久久久久久国产精品久久| 国产精品一区二区三| 热久久99这里有精品| 国产亚洲精品综合一区91| 亚洲午夜未满十八勿入免费观看全集| 成人黄色午夜影院| 欧美激情videos| 精品无人国产偷自产在线| 日韩va亚洲va欧洲va国产| 亚洲女同性videos| 亲爱的老师9免费观看全集电视剧| 欧美精品免费在线观看| 精品久久久久久电影| 日韩美女在线观看一区| 俺也去精品视频在线观看| 成人激情在线播放| 亚洲精品二三区| 琪琪亚洲精品午夜在线| 日韩影视在线观看| 91网站免费观看| 91精品国产色综合| 国产欧亚日韩视频| 国产精品高清在线| 日韩精品中文字幕视频在线| 91av在线免费观看视频| 亚洲欧美日韩高清| 国产精品视频免费在线| 国产精品扒开腿做爽爽爽的视频| 日韩av片永久免费网站|