五大手势
2015-10-15 23:20 真实16 阅读(244) 评论(0) 编辑 收藏 举报//
// ViewController.m
// UI-NO-8
//
// Created by Bruce on 15/7/22.
// Copyright (c) 2015年 Bruce. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
{
UIImageView *imageView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
imageView.center = self.view.center;
imageView.image = [UIImage imageNamed:@"1.tiff"];
[self.view addSubview:imageView];
// 如果不设置背景颜色的话 有可能 不响应手势
// 手势如果不响应
// 1、看是否添加到了imageView上 如果是 把userInteractionEnabled 设置成YES
// 2、查看 是否设置了背景颜色 如果没有设置 设置背景颜色
// 3、手势冲突 设置手势优先级 (截获触发事件、手势)设置优先级
// 五大手势:点击(长按) 拖拽 旋转 捏合 轻扫 都属于手势 继承自UIGestureRecognizer 父类
// 之一 点击
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
// 设置点击手指的个数
tap.numberOfTouchesRequired = 1;
// 设置手指点击的次数
tap.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:tap];
// 之二 长按
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)];
// 最小 按下的持续时间
longPress.minimumPressDuration = 1;
longPress.numberOfTouchesRequired = 2;
// 把手势 添加到 某个视图上addGestureRecognizer
[self.view addGestureRecognizer:longPress];
// 之三 拖拽
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(pan:)];
// 设置最少的手指个数
// pan.minimumNumberOfTouches = 2;
// 设置最多的手指个数
// pan.maximumNumberOfTouches = 2;
[self.view addGestureRecognizer:pan];
// 之四 轻扫
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipe:)];
swipe.direction = UISwipeGestureRecognizerDirectionLeft;
// 处理 拖拽和轻扫 两个手势的冲突
// 需要轻扫手势 执行完毕之后 再去执行拖拽手势
[pan requireGestureRecognizerToFail:swipe];
[self.view addGestureRecognizer:swipe];
// 之五 捏合
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinch:)];
[self.view addGestureRecognizer:pinch];
// 之六 旋转
UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotation:)];
[self.view addGestureRecognizer:rotation];
}
- (void)rotation:(UIRotationGestureRecognizer *)sender
{
// 通过旋转手势 让图片进行相同的变形
imageView.transform = CGAffineTransformMakeRotation(sender.rotation);
}
- (void)pinch:(UIPinchGestureRecognizer *)sender
{
// 通过手势 得到的 变化比例 让imageView的形态发生改变
imageView.transform = CGAffineTransformScale(imageView.transform, sender.scale, sender.scale);
imageView.center = self.view.center;
}
- (void)swipe:(UISwipeGestureRecognizer *)sender
{
CGFloat w = CGRectGetWidth([UIScreen mainScreen].bounds);
CGFloat h = CGRectGetHeight([UIScreen mainScreen].bounds);
self.view.frame = CGRectMake(w, 0, w, h);
[UIView animateWithDuration:2 animations:^{
self.view.frame = CGRectMake(0, 0, w, h);
}];
}
- (void)pan:(UIPanGestureRecognizer *)sender
{
// 获得 手势的触摸点
CGPoint tapLoc = [sender locationInView:self.view];
NSLog(@"%f %f",tapLoc.x,tapLoc.y);
// 点记的位置 设置成图片视图的 中心点
imageView.center = tapLoc;
}
- (void)longPress:(UILongPressGestureRecognizer *)sender
{
// 获得 手势的触摸点
CGPoint tapLoc = [sender locationInView:self.view];
NSLog(@"%f %f",tapLoc.x,tapLoc.y);
[UIView animateWithDuration:2 animations:^{
// 点记的位置 设置成图片视图的 中心点
imageView.center = tapLoc;
}];
}
//单击手势触发的方法
- (void)tapAction:(UITapGestureRecognizer *)sender
{
// self.view.backgroundColor = [UIColor redColor];
// 恢复视图的初始形态
imageView.transform = CGAffineTransformIdentity;
CGPoint tapLoc = [sender locationInView:self.view];
NSLog(@"%f %f",tapLoc.x,tapLoc.y);
[UIView animateWithDuration:0.5 animations:^{
// 点记的位置 设置成图片视图的 中心点
imageView.center = tapLoc;
}];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end