UI中的手势

原创 2015年07月08日 19:20:09

手势



一.触摸类UITouch

通过触摸类,我们可以实现各式的自定义手势

(1)创建UITouch

TouchView *view=[[TouchView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];

(2)开始触摸

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

NSLog(@"开始触摸");

①单点触摸

    UITouch *touch=[touches anyObject];

    CGPoint point=[touch locationInView:self.view];

    NSLog(@"%@",NSStringFromCGPoint(point));

②多点触摸

    NSSet *touchesSet=[event allTouches];

    for (UITouch *touch in touchesSet) {

        CGPoint point=[touch locationInView:self.view];

        NSLog(@"%@",NSStringFromCGPoint(point));


    }

#endif

}

(3)触摸结束

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

    NSLog(@"触摸结束");

}

(4)触摸移动

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

{

    NSLog(@"触摸移动");

}

(5)来电中断

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

{

    NSLog(@"来电中断");

}



二.手势类 UIGestureRecognizer

UIImageView *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];

获取图片方法1:这种获取图片的方法不会把图片放到内存了,但只会复制一份

NSString *path=[[NSBundle mainBundle] pathForResource:@"10_0" ofType:@"jpg"];

NSData *data=[NSData dataWithContentsOfFile:path];

UIImage *image=[UIImage imageWithData:data];

方法2:正常获取图片的方法

imageView.image=[UIImage imageNamed:@"10_0"];

imageView.image=image;

[self.view addSubview:imageView];

[imageView release];

1、点击手势UITapGestureRecognizer

(1)①添加敲击手势

UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapClick:)];

②开启

imageView.userInteractionEnabled=YES;

[imageView addGestureRecognizer:tap];

[tap release];


(2)①添加双击手势

一个视图可以有多个手势,但是一个手势只能添加到一个视图上

UITapGestureRecognizer *doubelTap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapClick:)];

②设置点击几次触发事件(这里是两次,也就是双击)

doubelTap.numberOfTapsRequired=2;

[imageView addGestureRecognizer:doubelTap];

[doubelTap release];


(3)优先响应双击手势方法,如果双击失败,再响应单击手势

[tap requireGestureRecognizerToFail:doubelTap];



2、长按手势UILongPressGestureRecognizer

imageView.userInteractionEnabled=YES;

(1)添加长按手势

UILongPressGestureRecognizer *longPress=[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressClick:)];

(2)设置几根手指有效

longPress.numberOfTapsRequired=1;

(3)设置最小的响应时间

longPress.minimumPressDuration=2;




3、滑动手势UISwipeGestureRecognizer

imageView.userInteractionEnabled=YES;

(1)添加滑动手势sw

UISwipeGestureRecognizer *leftSwipe=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];

(2)设置滑动方向

leftSwipe.direction=UISwipeGestureRecognizerDirectionLeft;

UISwipeGestureRecognizer *rightSwipe=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];

rightSwipe.direction=UISwipeGestureRecognizerDirectionRight;

(3)将滑动手势添加到视图上

[imageView addGestureRecognizer:leftSwipe];

[imageView addGestureRecognizer:rightSwipe];




三.手势的四种常用状态

1、刚开始生效UIGestureRecognizerStateBegan,

2、每次移动UIGestureRecognizerStateChanged,

3、手势结束UIGestureRecognizerStateEnded, 

4、手势被取消UIGestureRecognizerStateCancelled,



四、其他手势

1、拖动手势UIPanGestureRecognizer

imageView.userInteractionEnabled=YES;

UIPanGestureRecognizer *pgr=[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panClick:)];




2、旋转手势UIRotationGestureRecognizer

imageView.userInteractionEnabled=YES;

UIRotationGestureRecognizer *rgr=[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];




3、捏合手势UIPinchGestureRecognizer

imageView.userInteractionEnabled=YES;

UIPinchGestureRecognizer *pgr=[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];




五、同时使用两种手势

利用代理UIGestureRecognizerDelegate


实现后结果:




六.视图摇摆

layer类似于ps的图层,如果把一个UIView看做图片的话,layer就像是图层.一个图片是由很多个大小不同的有层次的图层构成的, UIView也是.

1、添加摇动动画(基本动画)

CABasicAnimation * shakeAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

2、设置时间

shakeAnimation.duration=duration;

shakeAnimation.fromValue=[NSNumber numberWithFloat:-raid];

shakeAnimation.toValue=[NSNumber numberWithFloat:raid];

3、自动倒带设置

shakeAnimation.autoreverses=YES;

4、完成移除

shakeAnimation.removedOnCompletion=YES;

5、设置重复次数,FLT_MAX为最大次数

if (count==0) {

shakeAnimation.repeatCount=FLT_MAX;

}else{

shakeAnimation.repeatCount=count;

}

6、添加给视图 layer用于设置动画,修改视图圆角等

[self.layer addAnimation:shakeAnimation forKey:@"Let me shake"];

7、停止视图摇摆

[self.layer removeAnimationForKey:@"Let me shake"];


UI高级--触摸与手势

1.触摸事件的处理方式 (1)事件类型 触摸事件(触摸手机屏幕) 运动事件(如微信的摇一摇) 远程控制事件(如蓝牙) (2)响应者类通过复写以下方法,可以监听触摸事件 /...
  • qq_26475319
  • qq_26475319
  • 2016年08月01日 20:58
  • 255

UI总结之cell之手势滑动

// 1. UIViewController #import "ViewController.h" #import "CustomCell.h" @interface ViewController ...
  • CharlesYaoxin
  • CharlesYaoxin
  • 2015年09月28日 20:39
  • 485

做项目过程中遇到的问题及解决----UIGesture手势与UI控件点击的事件冲突解决

在做项目中为了简单的实现键盘随时能隐藏,就在self.view上添加了一个命名为content的ScrollView,然后再content内部需要填充一个TableView,这时候在content上增...
  • zhanglei1239
  • zhanglei1239
  • 2015年10月15日 10:44
  • 582

九宫格安全手势锁

这些东西是从网上搜罗的,自己整理了然后以后自己用着方便,东西可以直接用,demo下载 效果图就不传了,直接运行就能看效果,最好还是下载下来看一下,博客上可能有漏说的,开发工具eclipse 直接上...
  • LuckChouDog
  • LuckChouDog
  • 2015年07月20日 10:08
  • 1481

BaiduMap---百度地图官方Demo之UI控制功能(介绍开关手势功能和显示隐藏UI控件)

  • IT1039871366
  • IT1039871366
  • 2015年07月02日 11:13
  • 5125

Unity3d 鼠标手势的左右滑动

unity 鼠标手势的左右滑动using UnityEngine; using System.Collections;public class HeroModelRotate : MonoBehavi...
  • q764424567
  • q764424567
  • 2017年11月25日 10:57
  • 130

UIScrollerView中一些常用的手势功能

UIScrollerView中一些比较常见的用法,说明都包含在注释中了: - (void)viewDidLoad {     [super viewDidLoad];       ...
  • sinat_29814399
  • sinat_29814399
  • 2016年09月13日 10:17
  • 238

手势 各大集锦 UI iOS

UITapGestureRecognizer、 UILongPressGestureRecongnizer是最基础的两个手势。 给一个视图添加Tap手势:      //...
  • bellazhouyi
  • bellazhouyi
  • 2015年09月06日 22:00
  • 296

iOS开发之UI手势

基础手势- (UIImageView *)imageView{ if (!_imageView) { _imageView = [[UIImageView alloc] ini...
  • qq_35757299
  • qq_35757299
  • 2016年09月19日 16:03
  • 563

手势(UIGestureXXX)使用详解

1、UIGestureRecognizerState说明如下: typedef enum {     UIGestureRecognizerStatePossible, //识别器在未识别出它的手...
  • BlackWolfSky
  • BlackWolfSky
  • 2016年05月13日 08:40
  • 363
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UI中的手势
举报原因:
原因补充:

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