#import "HYBRootViewController.h"
@interface HYBRootViewController () <UIGestureRecognizerDelegate>
@property (nonatomic, retain) UIImageView *imageView;
- (void)imageViewTap:(UITapGestureRecognizer *)sender;
@end
@implementation HYBRootViewController
@synthesize imageView = _imageView;
- (void)viewDidLoad {
[super viewDidLoad];
self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];
self.imageView.image = [UIImage imageNamed:@"1.png"];
self.imageView.userInteractionEnabled = YES; // Default is NO
[self.view addSubview:self.imageView];
// 添加点击手势
// 所有手势的父类 UIGestureReconizer
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(imageViewTap:)];
//tap.numberOfTapsRequired = 2; // 要求双击才触发事件
tap.numberOfTouchesRequired = 2; // 要求两个手指同时触摸才触发事件
// 将点击手势添加到imageView上
[self.imageView addGestureRecognizer:tap];
tap.delegate = self;
[tap release];
//
// 添加移动手势
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]
initWithTarget:self action:@selector(imageViewPaned:)];
[self.imageView addGestureRecognizer:pan];
pan.delegate = self;
[pan release];
//
// 添加缩放手势
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]
initWithTarget:self action:@selector(imageViewPinched:)];
[self.imageView addGestureRecognizer:pinch];
pinch.delegate = self;
[pinch release];
// 旋转手势
UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]
initWithTarget:self action:@selector(imageViewRotated:)];
[self.imageView addGestureRecognizer:rotation];
rotation.delegate = self;
[rotation release];
return;
}
- (void)dealloc {
self.imageView = nil;
[super dealloc];
return;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
return;
}
- (void)imageViewTap:(UITapGestureRecognizer *)sender {
self.view.backgroundColor = [UIColor greenColor];
return;
}
// 此方法在移动过程中时时调用
// 移动手势
- (void)imageViewPaned:(UIPanGestureRecognizer *)sender {
NSLog(@"paned");
// 这个view是这个移动手势被回到的视图上的view,这里就是self.imageView
//sender.view
// 拿到父 视图imageView被点击的点在Self.view上的位置
CGPoint pt = [sender translationInView:self.view];
sender.view.center = CGPointMake(sender.view.center.x + pt.x, sender.view.center.y + pt.y);
// 重置手势获取的偏移量
// 这一步很重要
[sender setTranslation:CGPointZero inView:self.view];
return;
}
// 缩放手势
// 此方法在缩放过程中会被调用多次
- (void)imageViewPinched:(UIPinchGestureRecognizer *)sender {
// 很重要的一个属性scale,会被捕获到缩放的倍数
// 参数一:原来的transform
// 参数二:水平方向缩放的倍数
// 参数三:垂直方向缩放的倍数
// CGAffineTansform 仿射变换矩阵(矩阵中放置view的缩放倍数,旋转角度,x,y坐标等参数)
// 将x,y方向的缩放倍数传给transform
sender.view.transform = CGAffineTransformScale(sender.view.transform, sender.scale, sender.scale);
// 会被多次调用这个方法,所以每次都要重置缩放倍数为原始倍数
sender.scale = 1.0f;
return;
}
// 旋转手势
- (void)imageViewRotated:(UIRotationGestureRecognizer *)sender {
// 改变矩阵的角度参数
sender.view.transform = CGAffineTransformRotate(sender.view.transform, sender.rotation);
// 重置角度,因为在这个方法在旋转时会时时被调用
sender.rotation = 0.0f;
return;
}
// 设置同时可以有两个手势同时识别
// 基本上是同时识别两个,默认为NO
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
@end
IOS各种手势的使用
最新推荐文章于 2023-04-13 21:34:42 发布