TouchAndGuest触摸事件和手势
//
// nextViewController.m
#import "nextViewController.h"
#import "my.h"
@interface nextViewController ()
@end
@implementation nextViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self createView];
}
#pragma mark ------------------------createView
- (void)createView
{
self.navigationItem.title =@"GESTUR";
UIImageView *vi =[[UIImageView alloc] init];
vi.tag = 100;
vi.frame = CGRectMake(100, 100, 120, 120);
vi.image = [UIImage imageNamed:@"a"];
[self.view addSubview:vi];
vi.userInteractionEnabled = YES ;
#pragma mark ------------------------单击手势
//一个视图可以附着多个手势,一个手势只能附着在一个视图上
// 单击手势
UITapGestureRecognizer *tap =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
//点击次数 默认是1
tap.numberOfTapsRequired =1 ;
//需要几个手指点击 默认是 1
tap.numberOfTouchesRequired = 1;
//附着在视图上
[vi addGestureRecognizer:tap];
#pragma mark ------------------------双击手势
//双击手势
UITapGestureRecognizer *doubleTap=[[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(onDouble:)];
doubleTap.numberOfTapsRequired = 2;
[vi addGestureRecognizer:doubleTap];
//单击在双击手势识别失败之后,在去识别手势
[tap requireGestureRecognizerToFail:doubleTap];
#pragma mark ------------------------长按手势
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onPress:)];
longPress.minimumPressDuration = 1;
[vi addGestureRecognizer:longPress];
#pragma mark ------------------------拖动手势
//拖动手势 Pan
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(onPan:)];
[vi addGestureRecognizer:pan];
#pragma mark ------------------------捏合手势
//捏合 手势
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]
initWithTarget:self action:@selector(onPinch:)];
[vi addGestureRecognizer:pinch];
//遵守UIGestureRecognizerDelegate协议
pinch.delegate = self;
#pragma mark ------------------------旋转手势
//旋转手势
UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(onRotation:)];
[vi addGestureRecognizer:rotation];
rotation.delegate = self;
#pragma mark ------------------------轻扫手势
//*********************************************************************
UISwipeGestureRecognizer *swipedown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onSwipe:)];
//设置滑动的方向
swipedown.direction = UISwipeGestureRecognizerDirectionDown;
[vi addGestureRecognizer:swipedown];
//*********************************************************************
UISwipeGestureRecognizer *swipeleft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onSwipe:)];
swipeleft.direction = UISwipeGestureRecognizerDirectionLeft;
[vi addGestureRecognizer:swipeleft];
//*********************************************************************
UISwipeGestureRecognizer *swiperight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onSwipe:)];
swiperight.direction = UISwipeGestureRecognizerDirectionRight;
[vi addGestureRecognizer:swiperight];
//*********************************************************************
UISwipeGestureRecognizer *swipeup = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onSwipe:)];
swipeup.direction = UISwipeGestureRecognizerDirectionUp;
[vi addGestureRecognizer:swipeup];
}
#pragma mark ------------------------双击手势
- (void)onDouble:(UITapGestureRecognizer *)ondouble
{
NSLog(@"图片被双击..");
}
#pragma mark ------------------------ 单击
- (void)onTap:(UITapGestureRecognizer *)tap
{
NSLog(@"图片被单击了...");
[self creatUIMenuController:tap];
}
#pragma mark------------------------UIMenuController
- (void)creatUIMenuController:(UITapGestureRecognizer *)tap
{
//菜单 是一个单例 NSUserDefaults UIApplication
UIMenuController *menu = [UIMenuController sharedMenuController];
UIMenuItem * item1 = [[UIMenuItem alloc] initWithTitle:@"拷贝" action:@selector(onCopy)];
UIMenuItem * item2 = [[UIMenuItem alloc] initWithTitle:@"删除" action:@selector(onDelete)];
menu.menuItems = @[item1,item2];
CGPoint point = [tap locationInView:self.view];
NSLog(@"point.x=%f",point.x);
NSLog(@"point.y=%f",point.y);
//设定坐标
[menu setTargetRect:CGRectMake(point.x, point.y, 80, 50) inView:self.view];
//显示menu
[menu setMenuVisible:YES animated:YES];
[self becomeFirstResponder];
}
- (void)onCopy
{
}
- (void)onDelete
{
UIImageView *iv = (id)[self.view viewWithTag:100];
[iv removeFromSuperview];
}
- (BOOL)canBecomeFirstResponder
{
return YES;
}
#pragma mark ------------------------ 长压
- (void)onPress:(UITapGestureRecognizer *)tap
{
NSLog(@"图片被长压");
}
#pragma mark ------------------------ 拖动
- (void)onPan:(UITapGestureRecognizer *)tap
{
NSLog(@"图片被拖动...");
UIImageView *iv = (id)[self.view viewWithTag:100];
//找到拖动的位置
CGPoint point = [tap locationInView:self.view];
if(point.x>=self.view.bounds.size.width-10)
point.x = self.view.bounds.size.width-10;
iv.frame = CGRectMake(point.x, point.y, iv.frame.size.width, iv.frame.size.height);
NSLog(@"%f,%f",point.x,point.y);
//iv.center = point;
}
#pragma mark ------------------------ 捏合 手势
-(void)onPinch:(UIPinchGestureRecognizer *)pinch
{
NSLog(@"捏合手势");
//放大 缩小
UIImageView *vi =(id)[self.view viewWithTag:100];
vi.transform = CGAffineTransformScale(vi.transform, pinch.scale, pinch.scale); // x的缩放比例 y的的缩放比例 相对与与
[pinch setScale:1]; // 缩放比例 1相当与不缩放
}
#pragma mark ------------------------旋转
- (void)onRotation:(UIRotationGestureRecognizer *)rot
{
NSLog(@"旋转手势");
UIImageView *vi =(id)[self.view viewWithTag:100];
vi.transform = CGAffineTransformRotate(vi.transform, rot.rotation);
[rot setRotation:0];
}
//pan拖动事件的时候轻扫功能不可用
#pragma mark ------------------------轻扫
- (void)onSwipe:(UISwipeGestureRecognizer *)swipe
{
UIImageView *vi =(id)[self.view viewWithTag:100];
CGPoint point = [swipe locationInView:self.view];
if(swipe.direction == UISwipeGestureRecognizerDirectionDown)
{
static int i = 0;
NSLog(@"轻扫手势 swip down = %d次",++i);
vi.frame = CGRectMake(100, point.y+2, vi.frame.size.width, vi.frame.size.height);
}
else if(swipe.direction == UISwipeGestureRecognizerDirectionLeft)
{
static int i = 0;
NSLog(@"轻扫手势 swip left = %d次",++i);
}
else if(swipe.direction == UISwipeGestureRecognizerDirectionRight)
{
static int i = 0;
NSLog(@"轻扫手势 swip right = %d次",++i);
}
else if(swipe.direction == UISwipeGestureRecognizerDirectionUp)
{
static int i = 0;
NSLog(@"轻扫手势 swip up = %d次",++i);//???????
NSLog(@"point.y=%f",point.y);
vi.frame = CGRectMake(100, point.y-200, vi.frame.size.width, vi.frame.size.height);
NSLog(@"point.y=%f",point.y);
}
}
#pragma mark ------------------------实现代理协议相似的方法//<UIGestureRecognizerDelegate>
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
//允许相似的手势接受事件,如果方法返回yes就是说允许相似的手势识别事件
return YES;
}
@end
TouchAndGuest触摸事件和手势的更多相关文章
- iOS中的触摸事件和手势处理
iOS中的事件可以分为三大类: 1> 触摸事件 2> 加速计事件 3> 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并 ...
- iOS开发之触摸事件及手势
1.iOS中的事件 在用户使用app过程中,会产生各种各样的事件,iOS中的事件可以分为3大类型: 2.响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并 ...
- iOS 触摸事件与手势识别器(Gesture Recognizers)
Gesture Recognizers与触摸事件分发 通过一个问题引出今天的知识: 1.大家应该都遇见过 当需要给tableView 添加一个tap 手势识别 但是tableView 的上的事件(滑动 ...
- iOS的触摸事件的用法以及和手势识别器的区别
1.首先来介绍下触摸事件和手势识别器的利与弊 触摸事件和手势识别器二者之间有直接的关系 手势识别器是在触摸事件的基础上演变过来的 当我们用到触摸事件时 默认的uiview是没有什么效果的 只能自定义v ...
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
-- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...
- 移动端-js触摸事件
开发者工具 在移动开发中,一种较为容易的做法是,先在桌面上开始原型设计,然后再在打算要支持的设备上处理移动特有的部分.多点触摸正是难以在PC上进行测试的那些功能之一,因为大部分的PC都没有触摸输入. ...
- 转发:iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
-- iOS事件全面解析 转载来自崔江涛(KenshinCui) 链接:http://www.cnblogs.com/kenshincui/p/3950646.html 概览 iPhone的成功很大一 ...
- Android 手势&触摸事件 MotionEvent
1.http://blog.csdn.net/omg_2012/article/details/7881443 这篇相当好啊 2.http://blog.csdn.net/android_tutor/ ...
- Android 手势&触摸事件
在刚开始学Android的时候,就觉得Google的文档不咋样,在研究手势时,更加的感觉Google的文档写得实在是太差了.很多常量,属性和方法,居然连个描述都没有. 没有描述也就罢了,但是OnGes ...
随机推荐
- 使用NuGet安装EntityFramework4.2
1.下载NuGet 有两种方式下载NuGet 第一种:在微软的档案库下载,下载地址为:http://visualstudiogallery.msdn.microsoft.com/27077b70-9d ...
- MemCache超详细解读 图
http://www.cnblogs.com/xrq730/p/4948707.html MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于 ...
- 把你的旧笔记本变成 Chromebook
导读 Linux 之年就在眼前.根据报道,Google 在 2016 年第一季度卖出了比苹果卖出的 Macbook 更多的 Chromebook.并且,Chromebook 即将变得更加激动人心.在 ...
- U-BOOT配置过程
摘自:<嵌入式Linux应用开发完全手册> ( Target : smdk2410 $1 Architecture: arm ...
- IIS 之 HTTP 错误 403.14 - Forbidden
错误如下图所示: 其实,这个提示下面已经交代了怎么解决问题,现在告诉大家具体的详细步骤. 方法一:配置" 默认文档 " 方法二:启用" 目录浏览 "
- ImageSource使用心得(转)
很多时候,我们会使用图片来装饰UI,比如作为控件背景等. 而这些图片可以分为两种形式,即存在于本地文件系统中的图片和存在于内存中的图片 对于这两种形式的图片,在WPF中,使用方法不同,下面主要说明针对 ...
- cocos2dx3.0-tinyxml在Android环境下解析xml失败的问题
本文由@呆代待殆原创,转载请注明出处. 正常情况下,我们在用tinyxml读取xml文件的的时候,会像下面这样写. std::string filePath = FileUtils::getInsta ...
- [原创] Web UI 自动化日期控件的处理
序 在构建自动化套件的过程中,日期操作是一件很重要也很频繁的事情.有的日期控件的div层级结构复杂,同一个类型的日期控件在多个子系统中的表现形式也大相径庭.多数工程师为了避免重复的工作,会封装抽象一个 ...
- 20145102 《Java程序设计》第2周学习总结
20145102 <Java程序设计>第2周学习总结 教材学习内容总结 这章先介绍了基本类型,和其他语言相似,分为short整数(2字节).int整数(4字节).long整数(8字节).f ...
- 正则转nfa:bug消除
正则到nfabug的解决方法 前面提到了这个bug,为了解决这个bug,我们必须在每次引用到一个假名的时候,都构建一个拷贝.现在假设我们遇到了一个假名,并得到了他的开始节点和结束节点,当前的难题就是构 ...