IOS各种手势的使用

#import "HYBRootViewController.h"

@interface HYBRootViewController () <UIGestureRecognizerDelegate>

@property (nonatomic, retain) UIImageView *imageView;

- (void)imageViewTap:(UITapGestureRecognizer *)sender;

@end

@implementation HYBRootViewController

@synthesize imageView = _imageView;

- (void)viewDidLoad {
  [super viewDidLoad];

  self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];
  self.imageView.image = [UIImage imageNamed:@"1.png"];
  self.imageView.userInteractionEnabled = YES; // Default is NO
  [self.view addSubview:self.imageView];

  // 添加点击手势
  // 所有手势的父类 UIGestureReconizer
  UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                 initWithTarget:self action:@selector(imageViewTap:)];
  //tap.numberOfTapsRequired = 2; // 要求双击才触发事件
  tap.numberOfTouchesRequired = 2; // 要求两个手指同时触摸才触发事件
  // 将点击手势添加到imageView上
  [self.imageView addGestureRecognizer:tap];
  tap.delegate = self;
  [tap release];

  //
  // 添加移动手势
  UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]
                                 initWithTarget:self action:@selector(imageViewPaned:)];
  [self.imageView addGestureRecognizer:pan];
  pan.delegate = self;
  [pan release];

  //
  // 添加缩放手势
  UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]
                                   initWithTarget:self action:@selector(imageViewPinched:)];
  [self.imageView addGestureRecognizer:pinch];
  pinch.delegate = self;
  [pinch release];

  // 旋转手势
  UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]
                                           initWithTarget:self action:@selector(imageViewRotated:)];
  [self.imageView addGestureRecognizer:rotation];
  rotation.delegate = self;
  [rotation release];

	return;
}

- (void)dealloc {
  self.imageView = nil;

  [super dealloc];
  return;
}

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
  return;
}

- (void)imageViewTap:(UITapGestureRecognizer *)sender {
  self.view.backgroundColor = [UIColor greenColor];
  return;
}

// 此方法在移动过程中时时调用
// 移动手势
- (void)imageViewPaned:(UIPanGestureRecognizer *)sender {
  NSLog(@"paned");
  // 这个view是这个移动手势被回到的视图上的view,这里就是self.imageView
  //sender.view
  // 拿到父 视图imageView被点击的点在Self.view上的位置
  CGPoint pt = [sender translationInView:self.view];

  sender.view.center = CGPointMake(sender.view.center.x + pt.x, sender.view.center.y + pt.y);
  // 重置手势获取的偏移量
  // 这一步很重要
  [sender setTranslation:CGPointZero inView:self.view];

  return;
}

// 缩放手势
// 此方法在缩放过程中会被调用多次
- (void)imageViewPinched:(UIPinchGestureRecognizer *)sender {
  // 很重要的一个属性scale,会被捕获到缩放的倍数
  // 参数一:原来的transform
  // 参数二:水平方向缩放的倍数
  // 参数三:垂直方向缩放的倍数
  // CGAffineTansform 仿射变换矩阵(矩阵中放置view的缩放倍数,旋转角度,x,y坐标等参数)
  // 将x,y方向的缩放倍数传给transform
  sender.view.transform = CGAffineTransformScale(sender.view.transform, sender.scale, sender.scale);
  // 会被多次调用这个方法,所以每次都要重置缩放倍数为原始倍数
  sender.scale = 1.0f;

  return;
}

// 旋转手势
- (void)imageViewRotated:(UIRotationGestureRecognizer *)sender {
  // 改变矩阵的角度参数
  sender.view.transform = CGAffineTransformRotate(sender.view.transform, sender.rotation);
  // 重置角度,因为在这个方法在旋转时会时时被调用
  sender.rotation = 0.0f;
  return;
}

// 设置同时可以有两个手势同时识别
// 基本上是同时识别两个,默认为NO
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
  shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
  return YES;
}

@end
时间: 2024-07-29 01:30:16

IOS各种手势的使用的相关文章

方法-IOS 触摸 手势和tableView cell的点击冲突

问题描述 IOS 触摸 手势和tableView cell的点击冲突 刚开始 书写的方法 // 触摸 (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //取出touches集合元素 UITouch *touch = [touches anyObject]; NSLog(@"%@", touch); CGPoint point = [touch locationInView:self.view]; // 打

iOS实现手势解锁操作_IOS

本文主要介绍通过手势识别实现手势解锁功能,这个方法被广泛用于手机解锁,密码验证,快捷支付等功能实现.事例效果如下所示.  首先,我们先分析功能的实现过程,首先我们需要先看大致的实现过程: 1.加载九宫格页面 2.实现按钮被点击及滑动过程中按钮状态的改变 3.实现滑动过程中的连线 4.绘制完毕后判定密码是否正确, 5.密码判定后实现跳转. 下面我们就来用代码实现上述五个过程. 1.加载九宫格界面 1.1九宫格内控件的分布 3*3 ,我们可以自定义view(包含3*3个按钮),添加到viewCont

ios的手势操作之UIGestureRecognizer浅析(推荐)_IOS

一.概述 iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)

基于JS实现Android,iOS一个手势动画效果_javascript技巧

废话不多说了,先给大家展示下效果图: 这是iOS下的效果,android下完全一致.通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过手势控制图片上下动画滑动实现开合效果,还支持声音效果. 下面是主要的代码 //index.ui.js var do_Animator1 = mm("do_Animator"); do_Animator1.append(500, { y: -1334, curve:

iOS - TouchLock 手势锁

1.绘制手势锁 具体实现代码见 GitHub 源码 QExtension QTouchLockView.h @interface QTouchLockView : UIView /// 提示信息框 @property (nonatomic, strong) UILabel *alertLabel; /** * 创建手势锁视图控件,获取滑动手势结果 * * @param frame 手势锁视图控件的位置尺寸 * @param result 滑动手势结果,YES 成功,NO 失败 * * @retu

IOS:按钮添加手势问题

问题描述 IOS:按钮添加手势问题 我用2个for循环创建了30 个按钮 10行 3列, 现在要在按钮上加一个长按手势,应该怎么去找哪个按钮是被长按手势点击的那个 解决方案 -(void)changeLocktion:(UILongPressGestureRecognizer *)longPress{ UIButton *btn = (UIButton *)longPress.view;} 解决方案二: 在按钮上添加长按手势的一些问题iOS 添加手势ios的手势的添加 解决方案三: 响应长按消息

IOS中的七种手势小结_IOS

今天为大家介绍一下IOS 的七种手势,手势在开发中经常用到,所以就简单 通俗易懂的说下, 话不多说,直接看代码: // 初始化一个UIimageView UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 300, 300)]; imageView.image = [UIImage imageNamed:@"12.jpg"]; // UIImageView的用户交互是默认关闭的,

iOS开发之手势gesture详解_IOS

前言 在iOS中,你可以使用系统内置的手势识别(GestureRecognizer),也可以创建自己的手势.GestureRecognizer将低级别的转换为高级别的执行行为,是你绑定到view的对象,当发生手势,绑定到的view对象会响应,它确定这个动作是否对应一个特定的手势(swipe,pinch,pan,rotation).如果它能识别这个手势,那么就会向绑定它的view发送消息,如下图 UIKit框架提供了一些预定义的GestureRecognizer.包含下列手势 UITapGestu

iOS开发之触摸事件以及手势_IOS

iOS中的事件分为三类:触摸事件.加速计事件.远程控制事件.只有继承了UIResponder的对象才能接收并处理事件,称之为"响应者对象".UIApplication.UIViewController.UIView都继承自UIResponder.UIResponder内部提供的方法来处理事件: 触摸事件:touchesBegan.touchesMoved.touchesEnded.touchesCancelled 加速计事件:motionBegan.motionEnded.motion