iOS手势状态:
typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
UIGestureRecognizerStatePossible, // 尚未识别是何种手势操作(但可能已经触发了触摸事件),默认状态
UIGestureRecognizerStateBegan, // 手势已经开始,此时已经被识别,但是这个过程中可能发生变化,手势操作尚未完成
UIGestureRecognizerStateChanged, // 手势状态发生转变
UIGestureRecognizerStateEnded, // 手势识别操作完成(此时已经松开手指)
UIGestureRecognizerStateCancelled, // 手势被取消,恢复到默认状态
UIGestureRecognizerStateFailed, // 手势识别失败,恢复到默认状态
UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded // 手势识别完成,同UIGestureRecognizerStateEnded
};
示例代码,长按放大,松开缩小,并伴随震动效果。
#import "ViewController.h"
#import <AudioToolbox/AudioToolbox.h>
@interface ViewController () {
UIButton *btn;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
[self.view addSubview:btn];
btn.center = self.view.center;
btn.backgroundColor = [UIColor purpleColor];
[btn setTitle:@"Button" forState:UIControlStateNormal];
btn.layer.masksToBounds = YES;
btn.layer.cornerRadius = 10;
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];//设置长按手势,longPressAction为长按后的操作
[longPress setMinimumPressDuration:1];//设置按1秒之后触发事件
[btn addGestureRecognizer:longPress];//把长按手势添加到按钮
}
- (void)longPressAction:(UILongPressGestureRecognizer *)sender {
// UIGestureRecognizerStatePossible, // 尚未识别是何种手势操作(但可能已经触发了触摸事件),默认状态
// UIGestureRecognizerStateBegan, // 手势已经开始,此时已经被识别,但是这个过程中可能发生变化,手势操作尚未完成
// UIGestureRecognizerStateChanged, // 手势状态发生转变
// UIGestureRecognizerStateEnded, // 手势识别操作完成(此时已经松开手指)
// UIGestureRecognizerStateCancelled, // 手势被取消,恢复到默认状态
// UIGestureRecognizerStateFailed, // 手势识别失败,恢复到默认状态
// UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded
if (sender.state == UIGestureRecognizerStateBegan) {
AudioServicesPlaySystemSound(1520);//添加震动效果
[UIView animateWithDuration:0.2 animations:^{
CGRect frame = self->btn.frame;
frame.size.width = 200;
frame.size.height = 100;
self->btn.frame = frame;
self->btn.center = self.view.center;
self->btn.layer.cornerRadius = 20;
}];
}
if (sender.state == UIGestureRecognizerStateEnded) {
[UIView animateWithDuration:0.2 animations:^{
CGRect frame = self->btn.frame;
frame.size.width = 100;
frame.size.height = 50;
self->btn.frame = frame;
self->btn.center = self.view.center;
self->btn.layer.cornerRadius = 10;
}];
}
}