第一种点击手势:
UITapGestureRecognizer
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 200)];
imageView.image = [UIImage imageNamed:@"10_1.jpg"];
//通过添加手势,让imageView响应事件
//创建了敲击手势
UITapGestureRecognizer * tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
//设置敲击几次才会相应
tgr.numberOfTapsRequired = 1;
//设置几根手指敲击才会响应
tgr.numberOfTouchesRequired = 1;
//将手势添加到imageView
[imageView addGestureRecognizer:tgr];
//必须让imageView接收事件
imageView.userInteractionEnabled = YES;
//再添加双击手势
UITapGestureRecognizer * tgr2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapTwice:)];
tgr2.numberOfTapsRequired = 2;
[imageView addGestureRecognizer:tgr2];
//声明只有当双击响应失败,才能响应单击
[tgr requireGestureRecognizerToFail:tgr2];
[tgr release];
[tgr2 release];
[self.view addSubview:imageView];
[imageView release];
}
- (void)onTap:(UITapGestureRecognizer *)tap
{
//找到imageView
UIImageView * imageView = (id)tap.view;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.25];
imageView.transform = CGAffineTransformRotate(imageView.transform, M_PI_4);
[UIView commitAnimations];
}
- (void)onTapTwice:(UITapGestureRecognizer *)tap
{
UIImageView * imageView = (id)tap.view;
[UIView animateWithDuration:0.25 animations:^{
imageView.transform = CGAffineTransformScale(imageView.transform, -1, 1);
}];
}
长按手势:
UILongPressGestureRecognizer
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 200)];
imageView.image = [UIImage imageNamed:@"10_1.jpg"];
imageView.userInteractionEnabled = YES;
[self.view addSubview:imageView];
[imageView release];
//添加长按手势
UILongPressGestureRecognizer * lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
//设置几根手指处罚
lpgr.numberOfTouchesRequired = 1;
//设置最小的长按时间
lpgr.minimumPressDuration = 2;
[imageView addGestureRecognizer:lpgr];
[lpgr release];
}
- (void)longPress:(UILongPressGestureRecognizer *)lpgr
{
if (lpgr.state == UIGestureRecognizerStateEnded) {
return;
}
static BOOL isPlain = NO;
UIImageView * image = (id)lpgr.view;
[UIView animateWithDuration:0.25 animations:^{
if (isPlain == YES) {
image.transform = CGAffineTransformMakeScale(1, 1);
} else {
image.transform = CGAffineTransformMakeScale(1, 0.5);
}
} completion:^(BOOL finished) {
isPlain = !isPlain;
}];
}
滑动手势:
UISwipeGestureRecognizer
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 200)];
imageView.image = [UIImage imageNamed:@"10_1.jpg"];
imageView.userInteractionEnabled = YES;
[self.view addSubview:imageView];
[imageView release];
//添加滑动手势
UISwipeGestureRecognizer * sgr = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
//监听方向
sgr.direction = UISwipeGestureRecognizerDirectionLeft;
[imageView addGestureRecognizer:sgr];
[sgr release];
}
- (void)swipe:(UISwipeGestureRecognizer *)swipe
{
if (swipe.direction & UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"向左滑动");
} else if (swipe.direction & UISwipeGestureRecognizerDirectionRight){
NSLog(@"向右滑动");
} else if (swipe.direction & UISwipeGestureRecognizerDirectionUp) {
NSLog(@"向上滑动");
} else if (swipe.direction & UISwipeGestureRecognizerDirectionDown) {
NSLog(@"向下滑动");
}
}
拖动手势:
UIPanGestureRecognizer
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 200)];
imageView.image = [UIImage imageNamed:@"10_1.jpg"];
imageView.userInteractionEnabled = YES;
[self.view addSubview:imageView];
[imageView release];
UIPanGestureRecognizer * pgr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
//设置几根手指允许拖动
pgr.minimumNumberOfTouches = 2;
pgr.maximumNumberOfTouches = 2;
[imageView addGestureRecognizer:pgr];
[pgr release];
}
- (void)pan:(UIPanGestureRecognizer *)pgr
{
static CGPoint center;
if (pgr.state == UIGestureRecognizerStateBegan) {
center = pgr.view.center;
return;
}
//当发生拖动时,每个像素都会调用这个方法
if (pgr.state == UIGestureRecognizerStateChanged) {
//获得拖动偏移的坐标
CGPoint translation = [pgr translationInView:self.view];
// [pgr locationInView:(UIView *)]
pgr.view.center = CGPointMake(center.x + translation.x, center.y + translation.y);
}
}
旋转手势:
UIRotationGestureRecognizer
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 200)];
imageView.image = [UIImage imageNamed:@"10_1.jpg"];
imageView.userInteractionEnabled = YES;
[self.view addSubview:imageView];
[imageView release];
UIRotationGestureRecognizer * rgr = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
[imageView addGestureRecognizer:rgr];
[rgr release];
}
- (void)rotation:(UIRotationGestureRecognizer *)rgr
{
static CGFloat rotation = 0;
rgr.view.transform = CGAffineTransformMakeRotation(rotation + rgr.rotation);
if (rgr.state == UIGestureRecognizerStateEnded || rgr.state == UIGestureRecognizerStateCancelled || rgr.state == UIGestureRecognizerStateFailed) {
//旋转结束,记录本次旋转最后,到底便宜了多少
rotation = rgr.rotation;
}
}
捏合手势:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 200)];
imageView.image = [UIImage imageNamed:@"10_1.jpg"];
imageView.userInteractionEnabled = YES;
[self.view addSubview:imageView];
[imageView release];
UIPinchGestureRecognizer * pgr = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
[imageView addGestureRecognizer:pgr];
[pgr release];
}
//捏合响应
- (void)pinch:(UIPinchGestureRecognizer *)pgr
{
//记录当前捏合比
static CGFloat currentScale = 1;
if (pgr.state == UIGestureRecognizerStateChanged) {
pgr.view.transform = CGAffineTransformMakeScale(pgr.scale, pgr.scale);
} else if (pgr.state != UIGestureRecognizerStateBegan) {
currentScale = pgr.scale;
} else if (pgr.state == UIGestureRecognizerStateBegan) {
pgr.scale = currentScale;
}
}
捏合与旋转
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 200)];
imageView.image = [UIImage imageNamed:@"10_1.jpg"];
//同时添加旋转和捏合两个手势
UIPinchGestureRecognizer * pgr = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
UIRotationGestureRecognizer * rgr = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
//设置关于手势的代理
pgr.delegate = self;
rgr.delegate = self;
[imageView addGestureRecognizer:pgr];
[imageView addGestureRecognizer:rgr];
imageView.userInteractionEnabled = YES;
[self.view addSubview:imageView];
[imageView release];
[rgr release];
[pgr release];
}
#pragma mark - 手势的响应
//捏合
- (void)pinch:(UIPinchGestureRecognizer *)pgr
{
static CGFloat lastScale = 1;
pgr.view.transform = CGAffineTransformScale(pgr.view.transform, pgr.scale / lastScale, pgr.scale / lastScale);
lastScale = pgr.scale;
}
//旋转
- (void)rotation:(UIRotationGestureRecognizer *)rgr
{
static CGFloat lastRotation = 0;
rgr.view.transform = CGAffineTransformRotate(rgr.view.transform, rgr.rotation - lastRotation);
lastRotation = rgr.rotation;
}
//实现代理方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
//一个参数是一个手势,另一个参数是另一个手势,返回真,允许同时响应两个手势,返回假不允许。
return YES;
}