1 #import <UIKit/UIKit.h>2 @interface MyButton : UIButton3 @end
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 *)event17 {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 *)event27 {28 UITouch *touch = [touches anyObject];29 CGPoint point = [touch locationInView:self];30 NSLog(@"end:%@",NSStringFromCGPoint(point));31 }32 @end
1 #import "ViewController.h" 2 #import "MyButton.h" 3 @interface ViewController () 4 { 5 MyButton *_v; 6 CGPoint _lastPoint; 7 } 8 @end 9 10 @implementation ViewController11 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 *)event21 {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 *)event29 {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 *)event40 {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 *)event47 {48 49 }50 @end
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 *)otherGestureRecognizer44 {45 return YES;46 }47 -(void)rotationGes:(UIRotationGestureRecognizer *)rotation48 {49 rotation.view.transform = CGAffineTransformRotate(rotation.view.transform, rotation.rotation);50 rotation.rotation = 0.0;51 }52 -(void)pinchGes:(UIPinchGestureRecognizer *)pinch53 {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 *)pan62 {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 //移动以后,把偏移量归068 [pan setTranslation:CGPointZero inView:pan.view];69 }70 71 -(void)tapGes:(UIGestureRecognizer *)tap72 {73 NSLog(@"==========");74 }75 @end
新闻热点
疑难解答