您的位置:首页 > 移动开发 > IOS开发

iOS 手势

2016-04-20 12:59 381 查看
- (void)viewDidLoad {

[super viewDidLoad];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTapped)];

[self.view addGestureRecognizer:tap];

_myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

_myView.center = self.view.center;

_myView.backgroundColor = [UIColor redColor];

[self.view addSubview:_myView];

//UIGestureRecognizer 手势识别器,能够把所在的view上的touch事件识别为相应的手势。

//这个类不能直接使用,需要使用它的各种子类。

单击手势

//创建手势时,需要制定target和方法,那么在手势触发时,就会调用绑定的方法。

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognized:)];

//触发手势所需要的点击次数。

tapGesture.numberOfTapsRequired = 1;

//触发手势所需要的触摸点数。

tapGesture.numberOfTouchesRequired = 1;

//把手势识别器添加到view上,view上的touch时间就会被识别。

[_myView addGestureRecognizer:tapGesture];

双击手势

UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapGestureRecognized:)];

//触发手势所需要的点击次数。

doubleTapGesture.numberOfTapsRequired = 2;

//触发手势所需要的触摸点数。

doubleTapGesture.numberOfTouchesRequired = 1;

//把手势识别器添加到view上,view上的touch时间就会被识别。

[_myView addGestureRecognizer:doubleTapGesture];

//tapGesture手势必须在doubleTapGesture手势识别失败时才能被识别。

[tapGesture requireGestureRecognizerToFail:doubleTapGesture];

长按手势

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureRecognized:)];

//触发长按手势的按压时间

longPress.minimumPressDuration = 0.5;

//手势触发前最大的允许移动距离。

longPress.allowableMovement = 10;

[_myView addGestureRecognizer:longPress];

捏合手势

UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureRecognized:)];

[_myView addGestureRecognizer:pinch];

旋转手势

UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGestureRecognized:)];

//手势也可以设置代理

rotation.delegate = self;

[_myView addGestureRecognizer:rotation];

滑动手势

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognized:)];

[_myView addGestureRecognizer:pan];

}

//当另外一个手势也可能触发时,调用此方法,返回YES,允许同时触发,返回NO不允许同时触发。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{

return YES;

}

单击手势方法

- (void)tapGestureRecognized:(UITapGestureRecognizer *)gesture{

NSLog(@"点击了");

}

双击手势方法

- (void)doubleTapGestureRecognized:(UITapGestureRecognizer *)gesture{

NSLog(@"双击了");

}

长按手势方法

- (void)longPressGestureRecognized:(UILongPressGestureRecognizer *)gesture{

//gesture.state手势的状态。

if (gesture.state == UIGestureRecognizerStateBegan) {

NSLog(@"长按了");

//菜单控制器,单例类

UIMenuController *mc = [UIMenuController sharedMenuController];

UIMenuItem *redItem = [[UIMenuItem alloc] initWithTitle:@"红色" action:@selector(redItemClick)];

UIMenuItem *greenItem = [[UIMenuItem alloc] initWithTitle:@"绿色" action:@selector(greenItemClick)];

UIMenuItem *blueItem = [[UIMenuItem alloc] initWithTitle:@"蓝色" action:@selector(blueItemClick)];

mc.menuItems = @[redItem,greenItem,blueItem];

//UIMenuController所在的view必须能够成为第一响应者,而普通的UIView不能成为第一响应者,所以UIMenuController必须显示在自定义view上。

[self.view becomeFirstResponder];

//设置菜单控制器显示的位置和父视图。

[mc setTargetRect:_myView.frame inView:self.view];

//让菜单控制器显示

[mc setMenuVisible:YES animated:YES];

}

}

捏合手势方法

- (void)pinchGestureRecognized:(UIPinchGestureRecognizer *)gesture{

_myView.transform = CGAffineTransformScale(_myView.transform, gesture.scale, gesture.scale);

gesture.scale = 1;

}

旋转手势方法

- (void)rotationGestureRecognized:(UIRotationGestureRecognizer *)gesture{

_myView.transform = CGAffineTransformRotate(_myView.transform, gesture.rotation);

gesture.rotation = 0;

}

滑动手势方法

- (void)panGestureRecognized:(UIPanGestureRecognizer *)gesture{

CGPoint point = [gesture translationInView:self.view];

_myView.center = CGPointMake(_myView.center.x+point.x, _myView.center.y+point.y);

[gesture setTranslation:CGPointZero inView:self.view];

}

- (void)redItemClick{

_myView.backgroundColor = [UIColor redColor];

[self.view resignFirstResponder];

}

- (void)greenItemClick{

_myView.backgroundColor = [UIColor greenColor];

[self.view resignFirstResponder];

}

- (void)blueItemClick{

_myView.backgroundColor = [UIColor blueColor];

[self.view resignFirstResponder];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: