最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS實現(xiàn)雙向滑動條效果

 更新時間:2020年08月20日 10:18:34   作者:jiangamh  
這篇文章主要為大家詳細(xì)介紹了iOS實現(xiàn)雙向滑動條效果的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

#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;

運行結(jié)果如下:

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • IOS內(nèi)存泄漏檢查方法及重寫MLeakFinder

    IOS內(nèi)存泄漏檢查方法及重寫MLeakFinder

    這篇文章主要介紹了IOS內(nèi)存泄漏檢查方法及如何重寫MLeakFinder,幫助ios開發(fā)者維護(hù)自身程序,感興趣的朋友可以了解下
    2021-04-04
  • IOS接入facebook詳解

    IOS接入facebook詳解

    這篇文章主要介紹了IOS接入facebook詳解,對接入第三方SDK感興趣的同學(xué),可以參考下
    2021-04-04
  • iOS橫屏彈鍵盤的高度錯誤異常解決

    iOS橫屏彈鍵盤的高度錯誤異常解決

    這篇文章主要給大家介紹了關(guān)于iOS橫屏彈鍵盤的高度錯誤異常解決的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • iOS App使用SQLite之句柄的定義及數(shù)據(jù)庫的基本操作

    iOS App使用SQLite之句柄的定義及數(shù)據(jù)庫的基本操作

    SQLite中在定義過句柄之后就可以指向數(shù)據(jù)庫,從而利用iOS應(yīng)用程序進(jìn)行打開或關(guān)閉等各種操作,這里我們就來看一下iOS App使用SQLite之句柄的定義及數(shù)據(jù)庫的基本操作
    2016-06-06
  • iOS App開發(fā)中用CGContextRef繪制基本圖形的基本示例

    iOS App開發(fā)中用CGContextRef繪制基本圖形的基本示例

    這篇文章主要介紹了iOS App開發(fā)中用CGContextRef繪制基本圖形的基本示例,CGContextRef同時可以進(jìn)行圖形顏色的填充以及文字的書寫,需要的朋友可以參考下
    2016-05-05
  • IOS 實現(xiàn)搖一搖的操作

    IOS 實現(xiàn)搖一搖的操作

    這篇文章主要介紹了IOS 實現(xiàn)搖一搖的操作的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • iOS10全新推送功能實現(xiàn)代碼

    iOS10全新推送功能實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了iOS10全新推送功能實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • iOS實現(xiàn)毛玻璃效果(無需要第三方)

    iOS實現(xiàn)毛玻璃效果(無需要第三方)

    這篇文章主要為大家詳細(xì)介紹了iOS實現(xiàn)毛玻璃效果,無需要第三方,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • iOS項目的開發(fā)命名規(guī)范教程

    iOS項目的開發(fā)命名規(guī)范教程

    為了團隊各成員之間代碼的互通、可讀、易維護(hù)性,特制訂此開發(fā)規(guī)范。下面這篇文章主要給大家介紹了關(guān)于iOS項目的開發(fā)命名規(guī)范的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • iOS中長按調(diào)出菜單組件UIMenuController的使用實例

    iOS中長按調(diào)出菜單組件UIMenuController的使用實例

    UIMenuController即是用來制作我們平時對文本長按屏幕后顯示出的復(fù)制粘貼等選項菜單,下面就來詳細(xì)整理一下iOS中長按調(diào)出菜單組件UIMenuController的使用實例:
    2016-06-06

最新評論

邯郸县| 湾仔区| 青龙| 天气| 宿迁市| 旺苍县| 平远县| 常宁市| 白玉县| 荣昌县| 阿图什市| 满洲里市| 吴旗县| 梓潼县| 农安县| 梓潼县| 达拉特旗| 丰都县| 和林格尔县| 启东市| 彭水| 平顶山市| 高台县| 文昌市| 旬邑县| 故城县| 濮阳县| 乐山市| 永嘉县| 盐亭县| 浪卡子县| 万年县| 靖边县| 芷江| 黔西| 邢台县| 东乡| 吉木乃县| 宣武区| 湟源县| 万宁市|