手势识别器

原创 2015年11月17日 18:45:36

创建一个UIImageView类的对象

注意要把对象imageView的交互开了

// 创建一个imageView 添加手势用
    UIImage *image = [UIImage imageNamed:@"Selected"];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    imageView.image = image;
    imageView.userInteractionEnabled = YES;
    [self.view addSubview:imageView];
    [imageView release];

创建好imageView后 把创建的手势对象添加到imageView上去:

tap – 轻拍

手势类 UIGestureRecognizer
这个类是个抽象类 其具体功能 交给子类去实现
抽象类就是省代码的类

// 初始化一个轻拍手势的对象
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];

// 添加手势到视图上
    [imageView addGestureRecognizer:tap];

// 释放
    [tap release];
// 实现轻拍方法
- (void)tapAction:(UITapGestureRecognizer *)tap
{
       NSLog(@"你拍我了, 很轻");
       UIImageView *imageView = (UIImageView *)tap.view;
       imageView.image = [UIImage imageNamed:@"Highlighted"];

}

longPress – 长按

// 长按
// 添加手势步骤
// 1. 初始化手势 添加手势触发调用的方法
// 2. 把手势添加到视图上
// 3. 释放手势
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];
// 设置长按时间
    longPress.minimumPressDuration = 2.0;
    [imageView addGestureRecognizer:longPress];
    [longPress release];
// 实现长按手势
- (void)longPressAction:(UILongPressGestureRecognizer *)longPress
{
    // 判断一下状态 长按 只需要出发一次方法
    if (longPress.state == UIGestureRecognizerStateBegan) {
        NSLog(@"长按触发了多少次");
    }

}

rotation – 旋转

 UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAciton:)];
    [imageView addGestureRecognizer:rotation];
    [rotation release];
// 实现旋转手势
- (void)rotationAciton:(UIRotationGestureRecognizer *)rotation
{
    NSLog(@"旋转...跳跃...");
// 形变属性 transform
// 参数一 要改变对应视图的形变属性
// 参数二 根据弧度去创建
    rotation.view.transform = CGAffineTransformRotate(rotation.view.transform, rotation.rotation);
// 每次转需要把旋转的角度 重置为0
// 因为要接替上一次的角度 开始旋转
    rotation.rotation = 0;
}

pinch – 捏合

UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAciton:)];
    [imageView addGestureRecognizer:pinch];
    [pinch release];
// 实现捏合收拾方法
- (void)pinchAciton:(UIPinchGestureRecognizer *)pinch
{
    NSLog(@"捏合");
// 相册的捏合 跟这个手势 没什么关系
// 根据缩放的刻度(比例)改变形变属性
    pinch.view.transform = CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale);
// 重置捏合的比例
    pinch.scale = 1;
}

pan – 平移

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
    [imageView addGestureRecognizer:pan];
    [pan release];
// 实现平移方法
- (void)panAction:(UIPanGestureRecognizer *)pan
{
    NSLog(@"平移");
// 获取平移的点(相对于要平移的视图)
    CGPoint p = [pan translationInView:pan.view];
    pan.view.transform = CGAffineTransformTranslate(pan.view.transform, p.x, p.y);
    [pan setTranslation:CGPointMake(0, 0) inView:pan.view];
}

swipe – 清扫

    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)];
    swipe.direction = UISwipeGestureRecognizerDirectionLeft;
    [imageView addGestureRecognizer:swipe];
    [swipe release];
// 实现轻扫方法
- (void)swipeAction:(UISwipeGestureRecognizer *)swipe
{
    NSLog(@"左扫");
}

screenEdgePan – 边缘扫

这个类继承于UIPanGestureRecognizer

 UIScreenEdgePanGestureRecognizer *screenEdgePan = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(screenEdgePanAction:)];
// 设置下从哪个边缘开始扫
    screenEdgePan.edges = UIRectEdgeRight;
    [imageView addGestureRecognizer:screenEdgePan];
    [screenEdgePan release];
// 实现边缘扫
- (void)screenEdgePanAction:(UIScreenEdgePanGestureRecognizer *)screenEdgePan
{
    NSLog(@"一定是 靠近屏幕边缘开始扫 才能触发");
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android中级:GestureDetector

Android基础:手势识别我们开启activity,通常是这样的:通过点击某个按钮来开启,这里我们不设置按钮,通过监听手势(左滑/右滑),来实现activity的切换。 效果图 有3个Activi...
  • ss1168805219
  • ss1168805219
  • 2016年04月22日 01:05
  • 1423

IOS-UI高级 事件的响应和手势识别器

1、事件的传递 从事件发生到其处理的对象,传递要经过特殊的一段过程,当屏幕接触的触摸时,ios将其打包到UIEvent对象中放入活动事件队列中。UIApplication对象从事件队列中取出最前...
  • A_Studystudy
  • A_Studystudy
  • 2016年07月31日 10:03
  • 180

Android手势识别和双击事件

安卓触摸屏的手势识别在很多时候会使用户操作更加方便: 实现原理主要是将该界面的onTouchEvent设置为GestureDetector的onTouchEvent: 具体实现代码: 1.在Ac...
  • rongwenbin
  • rongwenbin
  • 2014年09月29日 11:58
  • 340

Android手势识别器GestureDetector

以前只知道控件的onTouchEvent()事件,它的动作有MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP;...
  • yangshuangyue
  • yangshuangyue
  • 2016年12月08日 18:32
  • 1428

Android手势识别器

--------------------监听屏幕滑动事件------------ // 1.声明一个手势识别器 private GestureDetector gd; // 2.初始化一个手势识...
  • u012854263
  • u012854263
  • 2015年11月18日 08:54
  • 213

手势识别器

1.手势识别器
  • u013135772
  • u013135772
  • 2014年05月05日 17:25
  • 205

iOS 事件和响应者链,手势

事件出现在iphone上有三种主要方式:通过触摸,通过摇动,及远程控制。 Responding to Touch Events – touchesBegan:withEvent:– t...
  • ztk881012
  • ztk881012
  • 2013年12月12日 09:27
  • 949

UITouch 与 手势识别器

交互相关的属性 userInteractionEnabled 默认是YES ,如果设置为NO则不响应用户事件,并且把当前控件从事件队列中删除。也就是说设置了userInterfaceEnabled属性...
  • coyote1994
  • coyote1994
  • 2015年11月18日 17:55
  • 476

iOS手势识别:识别原理和自定义手势识别

1,手势识别器简介在iOS中由于手势识别器的存在,我们可以非常容易的识别出用户的交互手势。 系统提供的手势识别器如下: UITapGestureRecognizer (点一下) UIPinchGest...
  • hejunmeng
  • hejunmeng
  • 2016年05月11日 22:58
  • 1514

iOS事件响应者链之被忽视的手势识别器工作原理

事件响应链
  • zhoupengju
  • zhoupengju
  • 2016年08月19日 13:56
  • 957
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:手势识别器
举报原因:
原因补充:

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