一、Touch手势
1、利用手势实现UIButton移动效果 实例代码
1) 创建一个继承自UIButton的类 MyButton.h 代码实现
1 #import <UIKit/UIKit.h>
2 @interface MyButton : UIButton
3 @end
2)MyButton.m 的代码实现
1 #import "MyButton.h"
2 @implementation MyButton
3 {
4 CGPoint _lastPoint;
5 }
6
7 //手势开始
8 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
9 {
10 UITouch *touch = [touches anyObject];
11 CGPoint point = [touch locationInView:self];
12 NSLog(@"began:%@",NSStringFromCGPoint(point));
13 _lastPoint = point;
14 }
15
16 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
17 {
18 UITouch *touch = [touches anyObject];
19 CGPoint point = [touch locationInView:self];
20 CGFloat offsetx = point.x - _lastPoint.x;
21 CGFloat offsety = point.y - _lastPoint.y;
22 self.center = CGPointMake(self.center.x + offsetx, self.center.y + offsety);
23 NSLog(@"moved:%@",NSStringFromCGPoint(point));
24 }
25
26 -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
27 {
28 UITouch *touch = [touches anyObject];
29 CGPoint point = [touch locationInView:self];
30 NSLog(@"end:%@",NSStringFromCGPoint(point));
31 }
32 @end
3)父视图中的代码实现
1 #import "ViewController.h"
2 #import "MyButton.h"
3 @interface ViewController ()
4 {
5 MyButton *_v;
6 CGPoint _lastPoint;
7 }
8 @end
9
10 @implementation ViewController
11
12 - (void)viewDidLoad {
13 [super viewDidLoad];
14 _v = [[MyButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
15 _v.backgroundColor = [UIColor redColor];
16 [self.view addSubview:_v];
17 }
18
19 //手势开始
20 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
21 {
22 UITouch *touch = [touches anyObject];
23 CGPoint point = [touch locationInView:self.view];
24 NSLog(@"began:%@",NSStringFromCGPoint(point));
25 _lastPoint = point;
26 }
27
28 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
29 {
30 UITouch *touch = [touches anyObject];
31 CGPoint point = [touch locationInView:self.view];
32 CGFloat offsetx = point.x - _lastPoint.x;
33 CGFloat offsety = point.y - _lastPoint.y;
34 _v.center = CGPointMake(_v.center.x + offsetx, _v.center.y + offsety);
35 _lastPoint = point;
36 NSLog(@"moved:%@",NSStringFromCGPoint(point));
37 }
38
39 -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
40 {
41 UITouch *touch = [touches anyObject];
42 CGPoint point = [touch locationInView:self.view];
43 NSLog(@"end:%@",NSStringFromCGPoint(point));
44 }
45
46 -(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
47 {
48
49 }
50 @end
2、利用Touch手势实现控件的缩放与旋转效果 实例代码
1 #import "ViewController.h"
2 //遵守旋转与缩放的代理协议
3 @interface ViewController ()<UIGestureRecognizerDelegate>
4 @end
5
6 @implementation ViewController
7
8 - (void)viewDidLoad {
9 [super viewDidLoad];
10
11 UIImageView *imgv = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
12 imgv.center = self.view.center;
13 [self.view addSubview:imgv];
14 imgv.image = [UIImage imageNamed:@"3"];
15 imgv.userInteractionEnabled = YES;
16
17 //点击手势
18 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes:)];
19
20 //设置该手势需要的手指数
21 tap.numberOfTouchesRequired = 2;
22
23 //设置该手势的点击次数
24 tap.numberOfTapsRequired = 4;
25 [imgv addGestureRecognizer:tap];
26
27 //平移手势,拖拽手势
28 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGes:)];
29 [imgv addGestureRecognizer:pan];
30
31 //缩放手势
32 UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGes:)];
33 [imgv addGestureRecognizer:pinch];
34 pinch.delegate = self;
35
36 //旋转
37 UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGes:)];
38 [imgv addGestureRecognizer:rotation];
39 rotation.delegate = self;
40 }
41
42 //返回值表示能否同时识别其他(相对于已经设置了代理的手势)手势
43 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:
(UIGestureRecognizer *)otherGestureRecognizer
44 {
45 return YES;
46 }
47 -(void)rotationGes:(UIRotationGestureRecognizer *)rotation
48 {
49 rotation.view.transform = CGAffineTransformRotate(rotation.view.transform, rotation.rotation);
50 rotation.rotation = 0.0;
51 }
52 -(void)pinchGes:(UIPinchGestureRecognizer *)pinch
53 {
54 //transform:仿射变换
55 //pinch.scale,是缩放手势的捏合倍率
56 pinch.view.transform = CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale);
57
58 //倍率还原
59 pinch.scale = 1.0;
60 }
61 -(void)panGes:(UIPanGestureRecognizer *)pan
62 {
63 //返回当前的手势的偏移量
64 CGPoint offset = [pan translationInView:pan.view];
65 //pan.view就是pan手势所加到的视图
66 pan.view.center = CGPointMake(pan.view.center.x + offset.x, pan.view.center.y + offset.y);
67 //移动以后,把偏移量归0
68 [pan setTranslation:CGPointZero inView:pan.view];
69 }
70
71 -(void)tapGes:(UIGestureRecognizer *)tap
72 {
73 NSLog(@"==========");
74 }
75 @end