标签:
UIViewController.m
1 #import "ViewController.h" 2 #import "CustomerSlider.h" 3 @interface ViewController () 4 5 @end 6 7 @implementation ViewController 8 9 - (void)viewDidLoad { 10 [super viewDidLoad]; 11 12 CustomerSlider *slider=[CustomerSlider new]; 13 slider.frame=CGRectMake(0, 180, 320, 200); 14 // 是否可以多点触摸 15 slider.multipleTouchEnabled=YES; 16 slider.backgroundColor=[UIColor orangeColor]; 17 [self.view addSubview:slider]; 18 }
CustomerSlider.m (继承UIView)
1 #import "CustomerSlider.h" 2 3 @implementation CustomerSlider 4 5 -(instancetype)init 6 { 7 return [self initWithFrame:CGRectZero]; 8 } 9 -(instancetype)initWithFrame:(CGRect)frame 10 { 11 if (self=[super initWithFrame:frame]) { 12 // 用view新建滑条,并设置位置及大小 13 UIView *progress = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 10)]; 14 // 取屏幕中心点 15 CGPoint center; 16 // 取X轴的中心点 17 center.x=CGRectGetMidX(frame); 18 // 取Y轴的中心点 19 center.y=CGRectGetMidY(frame); 20 // 设置滑条的位置为屏幕的中心点 21 progress.center=center; 22 // 设置背景颜色 23 progress.backgroundColor=[UIColor grayColor]; 24 // 设置标签为100 25 progress.tag=100; 26 // 添加到视图上 27 [self addSubview:progress]; 28 29 // 用Button新建滑块,设置button的类型 30 UIButton *thumb=[UIButton buttonWithType:UIButtonTypeCustom]; 31 // 设置表签为101; 32 thumb.tag=101; 33 // 设置背景颜色 34 thumb.backgroundColor=[UIColor redColor]; 35 // 设置位置及大小 36 thumb.frame=CGRectMake(0, 0, 30, 30); 37 // 设置圆角 38 thumb.layer.cornerRadius=30/2; 39 // 设置滑块为中心点 40 thumb.center=center; 41 // 添加到视图 42 [self addSubview:thumb]; 43 } 44 return self; 45 } 46 47 -(void)setFrame:(CGRect)frame 48 { 49 [super setFrame:frame]; 50 // 获取上面的滑条 51 UIView *progress=[self viewWithTag:100]; 52 // 设置位置及大小 53 progress.frame=CGRectMake(0, 0, frame.size.width, 10); 54 CGPoint center; 55 center.x=CGRectGetMidX(self.bounds); 56 center.y=CGRectGetMidY(self.bounds); 57 progress.center=center; 58 // 获取滑块 59 UIView *thumb=[self viewWithTag:101]; 60 // 设置中心点7 61 thumb.center=center; 62 } 63 // 点击方法 64 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 65 { 66 // 可以点击任何对象 67 UITouch *touch=[touches anyObject]; 68 // 当设置点击对象为自己本身,获取点击的坐标位置 69 CGPoint p= [touch locationInView:self]; 70 // 获取此时滑块的中心点 71 CGPoint center=[self viewWithTag:101].center; 72 73 // 判断点击点的y坐标离滑条距离是否超过15,如果超过15就返回,滑块不移动,如果不超过15,滑块就在滑条上移动 74 // 绝对值的宏定义ABS()(滑条上半部分或下半部分,又一边是为负的,所以要用绝对值) 75 if (ABS( p.y-center.y )>15 ) { 76 return; 77 } 78 // 点击点的y坐标离滑条距离不超过15就把点击点的x轴坐标赋值给滑块的x坐标(滑块根据x轴的变化移动) 79 center.x=p.x; 80 [self viewWithTag:101].center=center; 81 // 输出触摸点数 82 NSLog(@"begin,touches ct=%d",touches.count); 83 84 } 85 // 滑动方法 86 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 87 { 88 // 输出触摸点数 89 NSLog(@"moved,touches ct=%d",touches.count); 90 UITouch *touch=[touches anyObject]; 91 CGPoint p= [touch locationInView:self]; 92 CGPoint center=[self viewWithTag:101].center; 93 94 // 绝对值的宏定义ABS() 95 if (ABS( p.y-center.y )>15 ) { 96 return; 97 } 98 center.x=p.x; 99 [self viewWithTag:101].center=center; 100 101 } 102 // 结束滑动时方法 103 -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 104 { 105 // 输出触摸点数 106 NSLog(@"end,touches ct=%d",touches.count); 107 } 108 @end
标签:
原文地址:http://www.cnblogs.com/WillingToAsk1946zzh/p/4486254.html