1..所有的触摸手势的父类是UIGestureRecognizer,但我们平时都用它的每个单独的子类,包含点击,拖拽,捏合,拖动等,
2..
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor =[UIColor lightGrayColor];
NSArray *imageArr =@[@"0",@"1.jpg",@"3.jpeg"];
for (int i=0;i<imageArr.count; i++)
{
UIImageView *imgV =[[UIImageView alloc]initWithFrame:CGRectMake(10, 40+i*130, 100, 100)];
imgV.image =[UIImage imageNamed:imageArr[i]];
imgV.userInteractionEnabled=YES;
[self addGesture:imgV];
[self.view addSubview:imgV];
}
}
-(void)addGesture:(UIView*)view
{
//点(单击)手势
UITapGestureRecognizer *tapGes =[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGr:)];
tapGes.numberOfTapsRequired = 2;//设置点击次数
tapGes.numberOfTouchesRequired = 1;//设置手指数
[view addGestureRecognizer:tapGes];
//拖拽移动手势
UIPanGestureRecognizer *panGes =[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGr:)];
[view addGestureRecognizer:panGes];
//捏合手势
UIPinchGestureRecognizer *pinchGes =[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGr:)];
[view addGestureRecognizer:pinchGes];
//旋转手势
UIRotationGestureRecognizer *rotationGes =[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotation:)];
[view addGestureRecognizer:rotationGes];
//长按手势
UILongPressGestureRecognizer *longGes =[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longG:)];
[view addGestureRecognizer:longGes];
//轻扫手势(和拖拽手势有冲突)默认为右 加一个方向,实例化一个轻扫手势 设置swipe.direction方向
// UISwipeGestureRecognizer *swipe =[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipe:)];
// swipe.direction = UISwipeGestureRecognizerDirectionUp;
// [view addGestureRecognizer:swipe];
}
#pragma mark 单击
//传的参数就是手势本身
-(void)tapGr:(UITapGestureRecognizer *)tapGr
{
// tapGr.view 响应手势的视图
//点击旋转
tapGr.view.transform =CGAffineTransformRotate(tapGr.view.transform, M_PI_2);
}
#pragma mark 拖拽移动
-(void)panGr:(UIPanGestureRecognizer*)panGr
{
//获取手势移动的坐标
CGPoint move =[panGr translationInView:self.view];
//当前的中心点加上移动的坐标
panGr.view.center =CGPointMake(panGr.view.center.x +move.x, panGr.view.center.y +move.y);
//每次动都会累加 每次动都得清零
[panGr setTranslation:CGPointZero inView:self.view];
}
#pragma mark 捏合手势
-(void)pinchGr:(UIPinchGestureRecognizer*)pinchGs
{
//响应的View的改变 (利用 比例 修改大小) 一参是修改前的形态 二参是横向.比例 三参是纵向.比例
pinchGs.view.transform =CGAffineTransformScale(pinchGs.view.transform, pinchGs.scale, pinchGs.scale);
//设置比例为1
pinchGs.scale =1;
}
#pragma mark 旋转
-(void)rotation:(UIRotationGestureRecognizer*)rotationGR
{
rotationGR.view.transform = CGAffineTransformRotate(rotationGR.view.transform, rotationGR.rotation);
//旋转的倍数
rotationGR.rotation =1;
}
#pragma mark 长按手势
-(void)longG:(UILongPressGestureRecognizer*)longGr
{//longGr.state 当前手势的状态
//长按手势会被多次调用,使用候需要判断状态
//长按刚一生效调用
if(longGr.state ==UIGestureRecognizerStateBegan)
{
//创建一个核心动画
CABasicAnimation *basicA =[CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
//动画起始角度
basicA.fromValue = @0;
//结束角度
basicA.toValue =@(M_PI*5);
//完成一次时间
basicA.duration =1;
//一次完成后的是否动画还原
basicA.autoreverses =YES;
//动画次数
basicA.repeatCount =10;
//添加到 View的layer层
[longGr.view.layer addAnimation:basicA forKey:@"ii"];
//key用来取消
// [longGr.view.layer removeAnimationForKey:@"ii"];
}
}
#pragma mark 轻扫手势
-(void)swipe:(UISwipeGestureRecognizer *)swipe
{
//判断轻扫手势的方向
if(swipe.direction ==UISwipeGestureRecognizerDirectionRight)
{
NSLog(@"向右扫");
CGRect rect =swipe.view.frame;
rect.origin.x +=10;
swipe.view.frame =rect;
}
// & 按位与 direction向上
if (swipe.direction & UISwipeGestureRecognizerDirectionUp) {
CGRect rect = swipe.view.frame;
rect.size.height += 10;
rect.origin.y -= 10;
swipe.view.frame = rect;
}
}