iOS中的手势识别的积累:UIGestureRecognizer

#import "RootViewController.h"
#import "UIColor+MyUIColor.h"
@interface RootViewController ()

@end

@implementation RootViewController

/*
 UITapGestureRecognizer是轻拍?手势识别器,能识别轻拍操作
 UILongPressGestureRecognizer是?长按?手势识别器,能识别?长按操作。
 UIRotationGestureRecognizer是旋转?手势识别器,能识别旋转操作。
 UIPinchGestureRecognizer是捏合?手势识别器,能识别捏合操作。
 UIPanGestureRecognizer是平移?手势识别器,能识别拖拽操作。
 UISwipeGestureRecognizer是轻扫?手势识别器,能识别拖拽操作。
 UIScreenEdgePanGestureRecognizer是屏幕边缘轻扫识别器,是iOS7中新增的?手势。

 */

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(0, 50, [UIScreen mainScreen].bounds.size.width, 400)];
    [self.view addSubview:redView];
    redView.backgroundColor = [UIColor redColor];

    [redView release];
    // 手势识别器的基类:UIGestureRecognizer
   //轻拍手势
    /*
    //轻拍手势
    //1.创建轻拍手势对象
    UITapGestureRecognizer *tapGesTure = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
    //2.将视图添加到视图上
    //设置轻拍的次数
    tapGesTure.numberOfTapsRequired = 2;
    //设置触摸的点数
    tapGesTure.numberOfTouchesRequired = 2;
     [redView addGestureRecognizer:tapGesTure];
     //3.释放
     [tapGesTure release];
   */
   //长按手势
    /*
    //1.创建长按手势对象
    UILongPressGestureRecognizer *longGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
    //设置长按手势的识别时间
    longGesture.minimumPressDuration = 0.3;
    //2.添加到视图
    [redView addGestureRecognizer:longGesture];

    //3.释放
    [longGesture release];
    */
   //清扫手势
    //1.创建清扫手势
    /*
    UISwipeGestureRecognizer *swipeGestureLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeGesture:)];
    //2.添加到视图
    [redView addGestureRecognizer:swipeGestureLeft];
    //释放
    [swipeGestureLeft release];

    UISwipeGestureRecognizer *swipeGestureRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeGesture:)];
    //设置清扫方向
    swipeGestureRight.direction = UISwipeGestureRecognizerDirectionLeft;

    //2.添加到视图
    [redView addGestureRecognizer:swipeGestureRight];
    //释放
    [swipeGestureRight release];
     */
    //平移手势

    //1.创建平移手势对象
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
    //2.添加手势对象
    [redView addGestureRecognizer:panGesture];
    //3.释放
    [panGesture release];

    //捏合手势
    /*
    //1.创建捏合手势
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)];
    //2.添加到视图
    [redView addGestureRecognizer:pinchGesture];
    //3.释放
    [pinchGesture release];

    */
    //旋转手势
    /*
    //1.创建旋转手势对象
    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotationGesture:)];
    //2.添加到视图
    [redView addGestureRecognizer:rotationGesture];
    //3.释放
    [rotationGesture release];
     */
    //屏幕边缘平移手势
    //1.创建屏幕边缘平移手势对象
//    UIScreenEdgePanGestureRecognizer *screenEdgePan =  [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handelScreenEdgeGesture:)];
//    //2.添加视图
//    //设置平移的屏幕边界
//    screenEdgePan.edges = UIRectEdgeLeft;
//    [redView addGestureRecognizer:screenEdgePan];
//    //3.释放视图
//    [screenEdgePan release];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark ---- handle gesture action
//屏幕边缘手势
- (void)handelScreenEdgeGesture:(UIScreenEdgePanGestureRecognizer *)screenEdge
{
    //1.获取平移增量
    CGPoint point = [screenEdge translationInView:screenEdge.view];

    //2.平移视图
    screenEdge.view.transform = CGAffineTransformTranslate(screenEdge.view.transform, point.x, 0);
    //3.将之前增量清零
    [screenEdge setTranslation:CGPointZero inView:screenEdge.view];

}
//旋转手势
- (void)handleRotationGesture:(UIRotationGestureRecognizer *)rotationGesture
{
    //放射变换
    rotationGesture.view.transform = CGAffineTransformRotate(rotationGesture.view.transform, rotationGesture.rotation);
    rotationGesture.rotation = 0;
}

//捏合手势
- (void)handlePinchGesture:(UIPinchGestureRecognizer *)pinch
{
    //仿射变换
    //从原来位置开始缩放
    pinch.view.transform =CGAffineTransformMakeScale(pinch.scale, pinch.scale);

//    pinch.view.transform = CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale);
//    //将之前的缩放比例置1
//    pinch.scale = 1;
}

//平移手势
- (void)handlePanGesture:(UIPanGestureRecognizer *)panGesture
{
//    //1.获取平移增量
//    CGPoint point = [panGesture translationInView:panGesture.view];
//    //2.改变视图的位置
//    panGesture.view.center = CGPointMake(panGesture.view.center.x + point.x, point.y + panGesture.view.center.y);
//
//    //3.将之前的增量清零
//    [panGesture setTranslation:CGPointZero inView:panGesture.view];
    //仿射变换
    //1.获取平移增量
    CGPoint point = [panGesture translationInView:panGesture.view];
    //2.修改视图的transform
   // panGesture.view.transform = CGAffineTransformMakeScale(point.x, point.y);
    //panGesture.view.transform = CGAffineTransformTranslate(panGesture.view.transform, point.x, point.y);
    panGesture.view.transform = CGAffineTransformMakeTranslation(point.x, point.y);
    //3.将之前的增量清零
    //[panGesture setTranslation:CGPointZero inView:panGesture.view];
}

//清扫手势
- (void)handleSwipeGesture:(UISwipeGestureRecognizer *)swipGesture
{

    if (swipGesture.direction == UISwipeGestureRecognizerDirectionRight) {
         swipGesture.view.backgroundColor = [UIColor randomColor];
    }
    if (swipGesture.direction == UISwipeGestureRecognizerDirectionLeft) {
        self.view.backgroundColor = [UIColor randomColor];
    }
}

//处理轻拍手势
- (void)handleTapGesture:(UITapGestureRecognizer *)tapGesture
{
    tapGesture.view.backgroundColor = [UIColor randomColor];

}
//处理长按手势
- (void)handleLongPress:(UILongPressGestureRecognizer *)longGesture{
    //当手势识别器为长按时,触发长按改变颜色的方法
    if (longGesture.state == UIGestureRecognizerStateBegan) {
         longGesture.view.backgroundColor = [UIColor randomColor];
    }

}
- (void)
@end

随机色

+ (UIColor *)randomColor
{
    return [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0  blue:arc4random() % 256 / 255.0  alpha:1];
}
时间: 2024-09-29 23:03:51

iOS中的手势识别的积累:UIGestureRecognizer的相关文章

IOS中的手势识别

最近做项目需要用到手势识别,所以花了点时间去学习了一下,其实手势识别这部分的内容不多,还是很容易上手的. IOS中的手势一共有六种 :tap(点击),longPress(长按),swipe(挥动),pan(拖动),pich(缩放),rotation(旋转).这六个手势类都是继承自UIGestureRecongnizer,所以,先来看看UIGestureRecongnizer这个类. UIGestureRecongizer继承自NSObject,是以上六种手势的父类,定义了一些所有手势公用的属性和

IOS中手势UIGestureRecognizer

通常在对视图进行缩放移动等操作的时候我们可以用UIScrollView,因为它里边自带了这些功能,我们要做的就是告诉UIScrollView的几个相关参数就可以了 但是没有实现旋转的手势即UIRotationGestureRecognizer IOS中手势有很多: UIRotationGestureRecognizer旋转 UITapGestureRecognizer手指点击 UIPinchGestureRecognizer缩放 UISwipeGestureRecognizer手指快速扫过 UI

iOS中的触摸事件,手势识别,摇晃事件等

在iOS中,事件可以划分为以下几类: 1.触摸事件:通过触摸,手势进行触发(手指点击.缩放等) 2.运动事件:通过加速器触发(例如手机晃动) 3.远程控制事件:通过其他远程设备触发(例如耳机控制按钮) 在iOS中并不是所有的类都能处理接收并事件,只有继承自UIResponder类的对象才能处理事件(如我们常用的UIView. UIViewController.UIApplication都继承自UIResponder,它们都能接收并处理事件).在UIResponder中 定义了上面三类事件相关的处

iOS开发笔记--iOS中的触摸事件和手势处理

iOS中的事件可以分为三大类:原文:http://my.oschina.net/aofe/blog/268749 1> 触摸事件 2> 加速计事件 3> 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象". UIApplication,UIViewController,UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件. UIRespon

iOS中的触摸事件

1.响应者对象 iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称之为“响应者对象”. UIApplication.UIViewController.UIView都继承自UIResponder,因此他们都是响应者对象,都能够接收并处理事件. 2.UIResponde UIResponder内部提供了以下方法来处理事件 触摸事件: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)e

iOS中touches事件,addtarget ...action和GestureRecognizer详解

刚学完uiview,uicontrol类,许多人知道 touchesBegain,touchesMoved,touchesEnd,GestureRecognizer的用途,但仔细考虑这些事件之间的关系,却令人头疼. 现在以一个例子来分析它们的内部实现: - (void)viewDidLoad { UIButton * btn=[[UIButton alloc]initWithFrame:CGRectMake(20, 40, 50, 50)]; [self.view addSubview:btn]

说说iOS中的手势及触摸

一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会.当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发生的视图,也就是用户触摸屏幕的地方.事件将沿着响应者链一直向下传递,直到被接受并做出处理.一般来说,第一响应者是个视图对象或者其子类对

iOS中的触摸事件和手势处理

iOS中的事件可以分为三大类: 1> 触摸事件 2> 加速计事件 3> 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象". UIApplication,UIViewController,UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件. UIResponder UIResponder内部提供了方法来处理事件; 1> 触摸事件 一

iOS中手势的使用

在iOS中添加手势比较简单,可以归纳为以下几个步骤: 创建对应的手势对象: 设置手势识别属性[可选]: 附加手势到指定的对象: 编写手势操作方法: 为了帮助大家理解,下面以一个图片查看程序演示一下上面几种手势,在这个程序中我们完成以下功能: 如果点按图片会在导航栏显示图片名称: 如果长按图片会显示删除按钮,提示用户是否删除: 如果捏合会放大.缩小图片: 如果轻扫会切换到下一张或上一张图片: 如果旋转会旋转图片: 如果拖动会移动图片: 具体布局草图如下: 为了显示导航条,我们首先将主视图控制器KC