五大手势的使用

tap(点击),loogPress(长按),Rotation(旋转),Pinch(捏合),swipe(轻扫),pan(拖拽)

*** 如果不响应手势,有以下几种原因

1、看是否添加到了ImageView 上,如果是把UserInteractionEnabled 设置成YES

2、查看是否设置 背景颜色,如果没有设置,设置背景颜色

3、手势的冲突,这时就需要设置手势的优先级,(截获触发事件,手势)设置优先级

**五大手势继承的父类:UIGestureRecognizer

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

//    设置点击手指的个数

tap.numberOfTouchesRequired = 1;

//   numberOfTapsRequired 设置手指点击的次数

tap.numberOfTapsRequired = 1;

//   addGestureRecognizer: 添加手势

[self.view addGestureRecognizer:tap];

#pragma mark--------------长按--------------------------

//    初始化

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

//    设置按下的最小持续时间 默认0.5s

longPress.minimumPressDuration = 1;

//    longPress.numberOfTouchesRequired = 2;

//   addGestureRecognizer: 把手势添加到某个视图上

[self.view addGestureRecognizer:longPress];

#pragma mark ---------拖拽-----------------

//    初始化

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

//    minimumNumberOfTouches 设置最少的手指个数

pan.minimumNumberOfTouches = 2;

//    maximumNumberOfTouches

[self.view addGestureRecognizer:pan];

#pragma mark-------------轻扫------------------------

//    初始化

UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipe:)];

//    direction 设置轻扫的方向

swipe.direction = UISwipeGestureRecognizerDirectionLeft;

//    处理手势冲突的思想 :谁的手势执行时间短就先执行谁  方法:requireGestureRecognizerToFail

//   需要轻扫手势 执行完之后  在去执行拖拽手势

[pan requireGestureRecognizerToFail/*处理拖拽和轻扫 两个手势冲突的方法*/:swipe/*先执行的*/];

[self.view addGestureRecognizer:swipe];

#pragma mark--------------捏合--------------------------

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

[self.view addGestureRecognizer:pinch];

#pragma mark---------------旋转-------------------------

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{

//    transform该变原来的形态 (如果不恢复它就一直以这个形态下去)与手势无关

//    通过手势 得到的 变化比例 让imageView的形态发生改变

imageView.transform = CGAffineTransformMakeScale(sender.scale, sender.scale);

//    imageView.transform = CGAffineTransformScale(imageView.transform, sender.scale, sender.scale);

imageView.center = self.view.center;

}

- (void)swipe:(UISwipeGestureRecognizer *)sender{

self.view.frame = CGRectMake(CGRectGetWidth([UIScreen mainScreen].bounds), 0, CGRectGetWidth([UIScreen mainScreen].bounds), CGRectGetHeight([UIScreen mainScreen].bounds));

[UIView animateWithDuration:2 animations:^{

self.view.frame = CGRectMake(0, 0, CGRectGetWidth([UIScreen mainScreen].bounds), CGRectGetHeight([UIScreen mainScreen].bounds));

}];

NSLog(@"dsdb");

}

- (void)pan:(UIPanGestureRecognizer *)sender{

//    locationInView: 获取点击的那个触摸点

CGPoint tapLoc = [sender locationInView:self.view];

NSLog(@"%f %f",tapLoc.x,tapLoc.y);

//    点击的位置设置成图片视图的这些点

imageView.center = tapLoc;

}

-(void)longPress:(UILongPressGestureRecognizer *)sender{

//    locationInView: 获取点击的那个触摸点

CGPoint tapLoc = [sender locationInView:self.view];

NSLog(@"%f %f",tapLoc.x,tapLoc.y);

//    动画

[UIView animateWithDuration:0.2 animations:^{

//    点击的位置设置成图片视图的这些点

imageView.center = tapLoc;

}];

}

//单击手势的方法

- (void)tapAction:(UITapGestureRecognizer *)sender{

//    让视图恢复原来的形态

imageView.transform = CGAffineTransformIdentity;

//    self.view.backgroundColor = [UIColor redColor];

//    locationInView: 获取点击的那个点

CGPoint tapLoc = [sender locationInView:self.view];

NSLog(@"%f %f",tapLoc.x,tapLoc.y);

//    动画

[UIView animateWithDuration:1 animations:^{

//    点击的位置设置成图片视图的这些点

imageView.center = tapLoc;

}];

}

时间: 2024-11-07 19:25:36

五大手势的使用的相关文章

五大手势

// //  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 Vie

2015 年五大移动端设计趋势

移动端网络的增长比桌面网络增长更迅猛,而且我们相信在未来五年,会有比 PC 端更多的用户通过移动设备连接互联网 Morgan Stanley – 2009年9月 图片来源:Rosenfeld Media 我记得像这种预测早在2000年底的已经出现,那时听起来有点古怪,但是在现在是2015年了而且预测是对的,孩纸们. 实际上,Comscore 认为,我们在去年早些时候已经越过了"引爆点".尽管不同的网站情况不尽相同,但总体来看,我们相信桌面用户在某种意义上成为了少数的"边缘用户

小心掉入旧墙刷漆的五大“坑”

一些朋友的旧墙刷漆都是由自己一手包办,但墙面重新刷漆有好几个误区需要多加注意的.前期材料的选择.施工的准备以及施工的方法,这都是墙面重新刷漆的重要环节.在这些环节中,一不小心就会掉入误区,现在让我们看看有哪些是需要我们注意的. 第一点:过分在意墙面涂料的品牌 一些朋友认为购买墙面涂料一定要买知名品牌使用才好,当然知名品牌的涂料产品确实有一定的质量保障,但是并不是说我们要一味地追求品牌油漆.其实,市场上许多普通品牌的油漆与知名品牌的质量和粉刷效果相差无几,但是在价格上却有很大的差异.所以家装时,需

五大常用算法

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html 分治算法 一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)-- 任何一个可以用计

vue手势解决方案

1.需求 因为项目中要做一个可以移动.旋转和放缩具有合成图片的功能,例如: 剑可以随意移动,然后把位移.旋转角度和放缩值传给后台进行合成. 2.解决方案 网上搜到手势插件AlloyFinger,https://github.com/AlloyTeam/AlloyFinger 首先安装AlloyFinger:npm install alloyfinger 然后在Vue文件里面引用:import AlloyFinger from 'alloyfinger' 使用方法: mounted() { thi

手势事件

1.基本的手势事件主要有如下三个方法: dispatchTouchEvent : 判断该事件是否需要下发.返回true表示需要下发给下级视图,返回false表示不需要下发(交给自身的onTouchEvent处理).但是否最终下发,还需根据onInterceptTouchEvent的拦截结果. onInterceptTouchEvent : 判断当前容器是否需要拦截该事件.返回true表示予以拦截(交给自身的onTouchEvent处理).不放给下级视图,返回false表示不拦截该事件. onTo

【Bootstrap】3.优化站点资源、完成响应式图片、让传送带支持手势

A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap]2.作品展示站点 中的资源.特别的,来看一看我们能控制的.影响页面速度的重要因素 —— 文件大小,包括图片.CSS和 JavaScript 文件.只要简单几步,我们就可以给这些文件“瘦身”,缩短加载时间. A.1 优化图片 这些图片都通过 Photoshop 的 “保存为 Web 格式” 进行了一

Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller

原文地址:http://android.xsoftlab.net/training/gestures/scroll.html 在Android中,滑动经常由ScrollView类来实现.任何超出容器边界的布局都应该将自己内嵌在ScrollView中,以便提供可滚动的视图效果.自定义滚动只有在特定的场景下才会被用到.这节课将会描述这样一种场景:使用scroller显示一种可滚动的效果. 你可以使用Scroller或者OverScroller来收集一些滑动动画所需要的数据.这两个类很相似,但是Ove

九点(九宫格)式手势解锁自定义view

周末闲着没事,写了个手势解锁的view,实现起来也蛮快的,半天多一点时间就完事.把源码和资源贴出来,给大家分享,希望对大家有用. 效果,就跟手机上的九点手势解锁一样,上个图吧: 过程嘛感觉确实没啥好讲的了,涉及的知识以前的博客都说过了,无非就是canva,paint,touch事件这些,画画圆圈画画线条,剩下的就是细节处理逻辑了.都在代码里,所以这里就主要是贴资源吧. 这个自定义view就一个类,源码如下: package com.cc.library.view; import android.