XCode4.2-使用复杂的触摸和手势UIXXGestureRecognizer

原创 2012年03月22日 22:48:51

使用复杂的触摸和手势

Apple有各种手势识别器的Class,下面,将使用几个手势识别器,实现:轻按、轻扫、张合、旋转(摇动暂不涉及)。每个手势都将有一个标签的反馈。

包括三个UIView,分别响应 轻按、轻扫、张合,一个UIImageView响应张合。使用SingleView模板。

ViewController.h代码:

#import <UIKit/UIKit.h>


@interface ViewController : UIViewController{

    UIView *tap;

    UIView *swipe;

    UIView *pinch;

    UIView *rotateView;

    

    UILabel *outputLabel;

    UIImageView *imageView;

}


@property(strong,nonatomicIBOutlet UIView *tap;      //点击视图

@property(strong,nonatomicIBOutlet UIView *swipe;    //轻扫视图

@property(strong,nonatomicIBOutlet UIView *pinch;    //张合视图

@property(strong,nonatomicIBOutlet UIView *rotateView;    // 旋转


@property(strong,nonatomicIBOutlet UILabel *outputLabel;  //  响应事件Label

@property(strong,nonatomicIBOutlet UIImageView *imageView;  // 图片View

@end


必须要在页面拖入相应控件并连线,在此不赘述。ViewController中包含对象部分可以省略,但建议写上。

1-点击事件

- (void)viewDidLoad

{

    [super viewDidLoad];


    UITapGestureRecognizer *tapRecognizer;  //创建一个轻按手势识别器

tapRecognizer=[[UITapGestureRecognizer alloc]initWithTarget:self 

                                                         action:@selector(foundTap:)];

                                    //初始化识别器,并使用函数指针(方法指针)触发同时实现方法

    tapRecognizer.numberOfTapsRequired=1;  //轻按对象次数(1)触发此行为

    tapRecognizer.numberOfTouchesRequired=1//要求响应的手指数

    [tap addGestureRecognizer:tapRecognizer];  //相应的对象添加控制器

}

-(void)foundTap:(UITapGestureRecognizer *)recognizer{

    outputLabel.text=@"已轻点";

}

仔细观察实现的方法,均是按着以下步骤:新建一个控制器实例--实例初始化--将其添加到类对象--实现函数指针中的方法(@selector()).

【若想获得轻按或轻扫手势坐标,可添加:

CGPoint location=[recognizer locationInView:<the view> 

<the view>即为手势识别器的视图名;location有两个参数x和y;还记得水果忍者吗?】

2-轻扫:

接下来,我们按着上述步骤实现轻扫:

还是viewDidLoad:

UISwipeGestureRecognizer *swipeRecognizer;  //创建一个轻扫识别器

    swipeRecognizer=[[UISwipeGestureRecognizer alloc]initWithTarget:self 

                                                             action:@selector(foundSwipe:)];

                           //对象初始化 并有函数指针

    swipeRecognizer.direction=

    UISwipeGestureRecognizerDirectionRight|UISwipeGestureRecognizerDirectionLeft;  

                                                    //手势相应 向左或向右滑动

    swipeRecognizer.numberOfTouchesRequired=1;   //扫动对象次数

    [swipe addGestureRecognizer:swipeRecognizer];  //向对象添加控制器


函数指针指向的方法:

-(void)foundSwipe:(UITapGestureRecognizer *)recognizer{

    outputLabel.text=@"已扫动";

}

相应扫动方向时,有四个方向可供选择:

UISwipeGestureRecognizerDirectionRight/Left/Up/Down;


3-张合:

将实现放大缩小ImageView。首先定义几个参数,.h中#import下方:

#define originWidth 330.0

#define originHeight 310.0

#define originX 40.0

#define originY 350.0

ViewDidLoad中:

UIPinchGestureRecognizer *pinchReconizer;   //新建一个张合识别器对象

    pinchReconizer=[[UIPinchGestureRecognizer alloc]initWithTarget:self 

                                                            action:@selector(foundPinch)];

                                       //初始化对象

    [pinch addGestureRecognizer:pinchReconizer];  //添加控制器

函数指针方法:

-(void)foundPinch:(UIPinchGestureRecognizer *)recognizer{ //注意此处的类

    NSString *feedback;

    double scale;

    scale=recognizer.scale;   //识别器的scale(刻度尺、尺度)

    imageView.transform=CGAffineTransformMakeRotation(0.0); //视图旋转角度-不旋转

    feedback=[[NSString alloc]initWithFormat:@"缩放:Scale:%1.2f,Velocity:%1.2f",recognizer.scale,recognizer.velocity];

    outputLabel.text=feedback;

    imageView.frame=CGRectMake(originXoriginYoriginWidth*scale, originHeight*scale);

                            //图片顶点不变,图片宽*尺度=放大后的宽度

}


4-旋转

首先Cocoa类使用弧度为单位,角度和弧度的转换关系:

          角度=弧度*180/Pi

所以,viewDidLoad如下:

UIRotationGestureRecognizer *rotationRecognizer;    //新建旋转手势控制器对象

    rotationRecognizer=[[UIRotationGestureRecognizer alloc]initWithTarget:self 

                                                    action:@selector(foundRotation:)];

                                                    //初始化对象

    [rotateView addGestureRecognizer:rotationRecognizer]; //添加控制器


函数指针指向的方法:

-(void)foundRotation:(UIRotationGestureRecognizer *)recognizer{

    NSString *feedback;

    double rotation;

    rotation=recognizer.rotation;  //返回一个控制器角度

    feedback=[[NSString allocinitWithFormat:@"旋转,Radians:%1.2f,Velocity:%1.2f",

              recognizer.rotation,recognizer.velocity];

    outputLabel.text=feedback;

    imageView.transform=CGAffineTransformMakeRotation(rotation);

                 //视图旋转角度为rotation,即手势的旋转角度

}


XCode4.2-使用复杂的触摸和手势UIXXGestureRecognizer

使用复杂的触摸和手势 Apple有各种手势识别器的Class,下面,将使用几个手势识别器,实现:轻按、轻扫、张合、旋转(摇动暂不涉及)。每个手势都将有一个弹出式窗口的反馈。 在...
  • iqRocket
  • iqRocket
  • 2013年01月30日 11:13
  • 1863

Android-自定义手势识别-复杂手势识别

一、概述 1、手势交互过程(原理) (1)触屏一刹那,触发MotionEvent事件 (2)被OnTounchListener监听,在onTouch()中获得MotionEvent对象 (3)...
  • SQ_Bang
  • SQ_Bang
  • 2016年07月17日 20:37
  • 970

Android触摸手势的传递图解

通过网上搜索关于android手势传递的内容,大部分都会讲到关于onTouchEvent,dispatchTouchEvent和onInterceptTouchEvent这三个方法,但大多数解释都点到...
  • u011640666
  • u011640666
  • 2015年01月19日 17:17
  • 845

Android开发08_OnTouchevent触摸事件(手势监听)

一、前言 Android开发中会遇到很多事件监听事件,例如我们常见的普通控件的OnClickListener监听事件、高级控件(ListView、GridView)的OnItemClickListen...
  • baidu_17619859
  • baidu_17619859
  • 2016年12月24日 18:02
  • 1346

移动端交互手势详解及实现

一丶概述      如今移动端设备大行其道,前端也走进了移动的领域。在写移动端页面的交互效果的时候,我么难免要接触一些复杂的手势,而不仅仅像pc端那样简单的鼠标事件。手势实际上是一种输入模式。我们现在...
  • u013063153
  • u013063153
  • 2016年09月03日 17:07
  • 2634

iOS 获取触摸,移动手势

苹果中有很多手势,之前项目中有个需求: 1.在图片区域内获取颜色值; 2.在图片区域内随着手点击和拖动选取的颜色改变; 3.取得颜色值发送给蓝牙模块; 在这里我只写了个关于手势的demo。 ...
  • NS_DavidLee
  • NS_DavidLee
  • 2016年01月07日 15:51
  • 1226

手势和触摸事件

手势识别和处理触摸事件是开发用户交互的重要事项,处理标准事件例如点击,长按,按键等等是基础的其他教程介绍的,这项教程是关注于处理一些专业的手势例如: - 向某个方向滑动 - 双击放大 - 手捏放...
  • qq_34767498
  • qq_34767498
  • 2016年07月17日 20:05
  • 439

Android之触摸手势检测GestureDetector使用详解

在Android中,当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing,onSingleTapConfirmed(单击),onDoubleTap(双击)等等。 一般...
  • u010687392
  • u010687392
  • 2015年02月26日 15:19
  • 3622

触摸事件与手势监听--Android GestureDetector详解

目录 事件监听的方法 GestureDetector类 GestureDetector使用方法 GesturetDetector.OnGestureListener 接口 GesttureDetect...
  • hpk1994
  • hpk1994
  • 2016年04月23日 00:10
  • 8389

九宫格安全手势锁

这些东西是从网上搜罗的,自己整理了然后以后自己用着方便,东西可以直接用,demo下载 效果图就不传了,直接运行就能看效果,最好还是下载下来看一下,博客上可能有漏说的,开发工具eclipse 直接上...
  • LuckChouDog
  • LuckChouDog
  • 2015年07月20日 10:08
  • 1383
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XCode4.2-使用复杂的触摸和手势UIXXGestureRecognizer
举报原因:
原因补充:

(最多只允许输入30个字)