手势
给图片添加 "敲击手势"
- (void)viewDidLoad {
[super viewDidLoad];
// 1.创建一个 "敲击手势" 对象
UITapGestureRecognizer *tapGest = [[UITapGestureRecognizer alloc] init];
// 2.设置"敲击手势" 对象的属性
// 点击的次数
tapGest.numberOfTapsRequired = 1;
// 手指的数量
tapGest.numberOfTouchesRequired = 2;
// 设置代理
tapGest.delegate = self;
// 3.把手势添加到 view 上
[self.imageView addGestureRecognizer:tapGest];
// 4.设置手势的监听方法
[tapGest addTarget:self action:@selector(tapView:)];
}
- (void)tapView:(UITapGestureRecognizer *)tapGest{
}
#pragma mark 手势的代理
//告诉view能否接收 "触摸事件"
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
//左边可以 点击 /右边不可以点击
CGPoint location = [touch locationInView:touch.view];
if (location.x <= touch.view.bounds.size.width * 0.5) {
return YES;
}
return NO;
}
//给图片添加 "长按手势"
- (void)viewDidLoad {
[super viewDidLoad];
// 1.创建一个 "长按手势" 对象
UILongPressGestureRecognizer *longGest = [[UILongPressGestureRecognizer alloc] init];
// 属性
// 长按的时候
longGest.minimumPressDuration = 3;
// 长按时,距离 "触摸点" 可移动的距离
longGest.allowableMovement = 30;
// 2.把手势添加到 view 上
[self.imageView addGestureRecognizer:longGest];
// 3.设置手势的监听方法
[longGest addTarget:self action:@selector(longPressView:)];
}
- (void)longPressView:(UILongPressGestureRecognizer *)longPressGest{
// 怎么判断 "长按" 开始和结束
NSLog(@"%s 手势状态 %ld",__func__, longPressGest.state);
if (longPressGest.state == UIGestureRecognizerStateBegan) {
NSLog(@"长按手势开始");
}else{
NSLog(@"长按手势结束");
}
}
//给图片添加 "轻扫手势"
- (void)viewDidLoad {
[super viewDidLoad];
// 1.创建一个 "轻扫手势" 对象
UISwipeGestureRecognizer *swipeGest = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeView:)];
// 属性
//UISwipeGestureRecognizerDirectionRight 向右轻扫
//UISwipeGestureRecognizerDirectionLeft 向左轻扫
//UISwipeGestureRecognizerDirectionUp 向上
//UISwipeGestureRecognizerDirectionDown 向下
swipeGest.direction = UISwipeGestureRecognizerDirectionUp;
// 2.把手势添加到 view 上
[self.imageView addGestureRecognizer:swipeGest];
}
- (void)swipeView:(UISwipeGestureRecognizer *)swipeGest{
// 怎么判断 "长按" 开始和结束
NSLog(@"%s 手势状态 %ld",__func__, swipeGest.state);
}
//给图片添加 "捏合手势"
要先对UIImageView连线
- (void)viewDidLoad {
[super viewDidLoad];
// 1.创建一个 "捏合手势" 对象
UIPinchGestureRecognizer *pinchGest = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinView:)];
// 2.把手势添加到 view 上
[self.imageView addGestureRecognizer:pinchGest];
}
- (void)pinView:(UIPinchGestureRecognizer *)pinGest{
// 缩放的比例是一个 "累加" 的过程
NSLog(@"%s 缩放的比例 %f",__func__, pinGest.scale);
// 设置图片的缩放
// 10x10 / 1.0
// 10*2.01 x 10*2.01 /1.01 + 1.0 = 2.01
// 10*2.01 * 3.03 x 10*2.01*3.03 / 1.03 + 2.01 = 3.03
#warning 放大图片后, 再次缩放的时候,马上回到原先的大小
//self.imageView.transform = CGAffineTransformMakeScale(pinGest.scale, pinGest.scale);
self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinGest.scale, pinGest.scale);
// 让比例还原,不要累加
// 解决办法,重新设置scale
pinGest.scale = 1;
}
//给图片添加 "旋转手势"
要先对UIImageView连线
- (void)viewDidLoad {
[super viewDidLoad];
// 1.创建一个 "旋转手势" 对象
UIRotationGestureRecognizer *rotationGest = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationView:)];
// 2.把手势添加到 view 上
[self.imageView addGestureRecognizer:rotationGest];
}
-(void)rotationView:(UIRotationGestureRecognizer *)rotationGest{
//旋转角度
//旋转的角度也一个累加的过程
NSLog(@"旋转角度 %f",rotationGest.rotation);
// 设置图片的旋转
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotationGest.rotation);
// 清除 "旋转角度" 的累
rotationGest.rotation = 0;
}
监听到多个手势
连线
- (void)viewDidLoad {
[super viewDidLoad];
/**
* 默认情况下,控件只能 监听到一种 手势
* 如果要监听到多个手势,设置一个代理的方法,告知它允许 ”多个手势“ 并存
*/
//给图片添加 "旋转手势"
// 1.创建一个 "旋转手势" 对象
UIRotationGestureRecognizer *rotationGest = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationView:)];
// 属性
//设置代理
rotationGest.delegate = self;
// 2.把手势添加到 view 上
[self.imageView addGestureRecognizer:rotationGest];
//给图片添加 "捏合手势"
UIPinchGestureRecognizer *pinchGest = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];
[self.imageView addGestureRecognizer:pinchGest];
}
-(void)rotationView:(UIRotationGestureRecognizer *)rotationGest{
//旋转角度
//旋转的角度也一个累加的过程
NSLog(@"旋转角度 %f",rotationGest.rotation);
// 设置图片的旋转
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotationGest.rotation);
// 清除 "旋转角度" 的累
rotationGest.rotation = 0;
}
-(void)pinchView:(UIPinchGestureRecognizer *)pinchGest{
//设置图片缩放
self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinchGest.scale, pinchGest.scale);
// 还源
pinchGest.scale = 1;
}
#pragma mark 手势代理
//Simultaneous 同时发生
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
//给图片添加 "拖拽手势"
连线
- (void)viewDidLoad {
[super viewDidLoad];
// 1.创建一个 "拖拽手势" 对象
UIPanGestureRecognizer *panGest = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];
// 添加手势
[self.imageView addGestureRecognizer:panGest];
}
-(void)panView:(UIPanGestureRecognizer *)panGest{
// 方法
//panGest.view触摸的view
//拖拽的距离 [距离是一个累加]
CGPoint trans = [panGest translationInView:panGest.view];
NSLog(@"%@",NSStringFromCGPoint(trans));
// 设置图片移动
CGPoint center = self.imageView.center;
center.x += trans.x;
center.y += trans.y;
self.imageView.center = center;
//清除 累加 的距离
[panGest setTranslation:CGPointZero inView:panGest.view];
}
浙公网安备 33010602011771号