zoukankan      html  css  js  c++  java
  • 手势的简单使用(6种)以及代理方法

    注意:全部都是在UIView上操作手势

    代码:

      1 #import "ViewController.h"
      2 @interface ViewController () <UIGestureRecognizerDelegate>
      4 @property (weak, nonatomic) IBOutlet UIImageView *imageView;
      5 @end
      7 @implementation ViewController
      8 - (void)viewDidLoad {
      9     [super viewDidLoad];
     10     //只要是手势,默认都是相对于原来位置,且默认控制只支持一个手势!!若想支持多个手势,详见下面的代理方法
     11 //    [self setUpRotation];
     12 //    [self setUpPinch];
     13     [self setUpPan];
     14 }
     15 
     16 #pragma mark - 点按手势
     17 - (void)setUpTap
     18 {
     19     //创建点按手势
     20     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
     21     //需要连续点3次才能触发
     22     //    tap.numberOfTapsRequired = 3;
     23     //往imageView上添加点按手势
     24     [self.imageView addGestureRecognizer:tap];
     25     //设置点按手势代理
     26     tap.delegate = self;
     27 }
     28 
     29 - (void)tap:(UITapGestureRecognizer *)tap
     30 {
     31     NSLog(@"%s",__func__);
     32 }
     33 
     34 #pragma mark - 长按手势
     35 //默认触发两次(开始触摸半秒后一次,结束触摸一次)
     36 - (void)setUpLongPress
     37 {
     38     UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
     39     [self.imageView addGestureRecognizer:longPress];
     40     longPress.delegate = self;
     41 }
     42 
     43 - (void)longPress:(UILongPressGestureRecognizer *)longPress
     44 {
     45     开始的时候触摸
     46     if (longPress.state == UIGestureRecognizerStateBegan) {
     47        NSLog(@"%s",__func__);
     48     }
     49     结束的时候触摸
     50     if (longPress.state == UIGestureRecognizerStateEnded) {
     51         NSLog(@"%s",__func__);
     52     }
     53 }
     54 
     55 #pragma mark - 轻扫手势
     56 - (void)setUpSwipe
     57 {
     58     //默认轻扫手势往右划屏幕
     59     UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
     60     //向上划
     61     swipeUp.direction = UISwipeGestureRecognizerDirectionUp;
     62     [_imageView addGestureRecognizer:swipeUp];
     63     //一个清扫手势只支持一个方向,如果想支持多个方向,必须创建多个
     64     UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
     65     //向下划
     66     swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
     67     [_imageView addGestureRecognizer:swipeDown];
     68 }
     69 - (void)swipe:(UISwipeGestureRecognizer *)swipe
     70 {
     71     NSLog(@"%s",__func__);
     72 }
     73 
     74 #pragma mark - 旋转手势
     75 //默认传递的角度都相对于最开始的位置
     76 - (void)setUpRotation
     77 {
     78     UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
     79     rotation.delegate = self;
     80     [self.imageView addGestureRecognizer:rotation];
     81 }
     82 - (void)rotation:(UIRotationGestureRecognizer *)rotation
     83 {
     84     //让图片随着手势旋转而旋转,旋转的角度相当于初始位置的值,配合rotation.rotation = 0;无法转动
     85 //    self.imageView.transform = CGAffineTransformMakeRotation(rotation.rotation);
     86     //手势旋转一下能让图片高速旋转N圈,并且不受控制,方向不容易确定。配合rotation.rotation = 0;后角度一直为0
     87     self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotation.rotation);   
     88     //复位
     89     rotation.rotation = 0;
     90     //获取手势旋转的角度
     91     NSLog(@"%f",rotation.rotation);
     92 }
     93 
     94 #pragma mark - 捏合手势
     95 //两根手指放大缩小图片
     96 - (void)setUpPinch
     97 {
     98     UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
     99     pinch.delegate = self;
    100     [self.imageView addGestureRecognizer:pinch];
    101 }
    102 - (void)pinch:(UIPinchGestureRecognizer *)pinch
    103 {
    104     //放大的比例相对于原始点,注意:这个不能配合pinch.scale = 1使用,否则不能放大
    105 //    self.imageView.transform = CGAffineTransformMakeScale(pinch.scale, pinch.scale);
    106     //随着两手指的距离增大,图片会无规则的迅速的放大或者缩小(此处无法控制放大还是缩小),注意:配合pinch.scale = 1使用会正常的放大和缩小
    107     self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinch.scale, pinch.scale);
    108     //复位
    109     pinch.scale = 1;
    110     NSLog(@"%f",pinch.scale);
    111 }
    112 
    113 #pragma mark - 拖拽
    114 //移动视图
    115 - (void)setUpPan
    116 {
    117     UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
    118     [self.imageView addGestureRecognizer:pan];
    119 }
    120 - (void)pan:(UIPanGestureRecognizer *)pan
    121 {
    122     //获取手势的移动,相对于原始点
    123     CGPoint transP = [pan translationInView:self.imageView];
    124     self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, transP.x, transP.y);
    125     //复位
    126     [pan setTranslation:CGPointZero inView:self.imageView];
    127     NSLog(@"%@",NSStringFromCGPoint(transP));
    128 }
    129 @end

    代理方法:

     1 是否允许同时支持多个手势,默认只支持一个手势,要调用此方法注意设置代理
     2 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
     3 {
     4     return YES;
     5 }
     6 
     7 是否允许开始触发手势
     8 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
     9 {
    10     return NO;
    11 }
    12 
    13 是否允许接收手机的触摸(可以控制触摸的范围)
    14 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    15 {
    16     //获取当前的触摸点
    17     CGPoint currentP = [touch locationInView:self.imageView];
    18       在图片的左半区域可以接受触摸
    19     if (currentP.x < self.imageView.bounds.size.width * 0.5) {
    20         return YES;
    21     }else {
    22         return NO;
    23     }
    24 }
  • 相关阅读:
    PHP下安装memcached
    SQL Case when 的使用方法
    关于安装PHP补装PDO与PDO_MYSQL操作
    nginx 站点80跳443配置
    mysql 热备
    Ajax技术---核心XMLHttpRequest对象
    线性代数中一组基向量的标准正交化原理通熟易懂理解
    关于Quartus构建nios软核以及eclipse建立c语言工程以及成功下载到FPGA芯片过程遇到的各种问题以及解决方法详解
    ucosii操作系统内核源码学习第一篇
    Qt编译工程提示qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法
  • 原文地址:https://www.cnblogs.com/hissia/p/5451216.html
Copyright © 2011-2022 走看看