码迷,mamicode.com
首页 > 其他好文 > 详细

自定义UISlider之点触摸

时间:2015-05-07 23:45:17      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

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

 

自定义UISlider之点触摸

标签:

原文地址:http://www.cnblogs.com/WillingToAsk1946zzh/p/4486254.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!