闲了下来,自己写写demo,把iOS有的几种手势大致整理了下:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
mImageView = [[UIImageView alloc] initWithFrame:CGRectMake(50, 199, 200, 200)];
[mImageView setImage:[UIImage imageNamed:@"wade.jpg"]];
mImageView.userInteractionEnabled = YES;//默认是关闭的
[self.view addSubview:mImageView];
//1.拖动手势
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[mImageView addGestureRecognizer:pan];
//2.长按手势
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
[mImageView addGestureRecognizer:longPress];
//3.轻拍手势
//numberOfTapsRequired 拍的次数
//numberOfTouchesRequired 几个手指头在拍
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapClick:)];
singleTap.numberOfTapsRequired = 1; //
[mImageView addGestureRecognizer:singleTap];
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapClick:)];
doubleTap.numberOfTapsRequired = 2;
singleTap.numberOfTouchesRequired = 3;
doubleTap.numberOfTouchesRequired = 3;
//双击手势检测失败才会触发单击手势相应的操作,不加这句,当用户响应的是双击手势的时候,会触发单击手势然后会触发双击手势(其实是不要单击手势的)
[singleTap requireGestureRecognizerToFail:doubleTap];
[mImageView addGestureRecognizer:doubleTap];
//4.放大缩小手势
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
[mImageView addGestureRecognizer:pinch];
//5.旋转手势
UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
[mImageView addGestureRecognizer:rotation];
//6.滑动手势
UISwipeGestureRecognizer *swip = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swip:)];
[mImageView addGestureRecognizer:swip];
//7.
UIScreenEdgePanGestureRecognizer *edge = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(edge:)];
[mImageView addGestureRecognizer:edge];
}
- (void)handlePan:(UIPanGestureRecognizer *)panGest {
CGPoint translation = [panGest translationInView:self.view];
panGest.view.center = CGPointMake(panGest.view.center.x + translation.x, panGest.view.center.y + translation.y);
[panGest setTranslation:CGPointZero inView:self.view];
}
- (void)longPress:(UILongPressGestureRecognizer *)recognizer {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, mImageView.frame.size.width, 50)];
label.backgroundColor = [UIColor redColor];
[mImageView addSubview:label];
}
- (void)tapClick:(UITapGestureRecognizer *)recognizer {
if (recognizer.numberOfTapsRequired == 1) {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, mImageView.frame.size.width, 50)];
label.backgroundColor = [UIColor blueColor];
[mImageView addSubview:label];
}else if (recognizer.numberOfTapsRequired == 2) {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, mImageView.frame.size.width, 100)];
label.backgroundColor = [UIColor yellowColor];
[mImageView addSubview:label];
}
}
- (void)pinch:(UIPinchGestureRecognizer *)recognizer {
recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
recognizer.scale = 1;//这个是必须要设置的
}
- (void)rotation:(UIRotationGestureRecognizer *)recognizer {
recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
recognizer.rotation = 0;
}
- (void)swip:(UISwipeGestureRecognizer *)recognizer {
recognizer.numberOfTouchesRequired = 2;
recognizer.direction = UISwipeGestureRecognizerDirectionRight;
}
- (void)edge:(UIScreenEdgePanGestureRecognizer *)recognizer {
recognizer.edges = UIRectEdgeRight;
if (UIGestureRecognizerStateBegan == recognizer.state || UIGestureRecognizerStateChanged == recognizer.state) {
CGPoint translation = [recognizer translationInView:recognizer.view];
[UIView animateWithDuration:0.5 animations:^{
mImageView.center = CGPointMake(self.view.center.x + translation.x, mImageView.center.y);
}];
}
}