iOS 利用平移缩放旋转手势对view实现对应的平移缩放旋转效果(一)

原创 2015年11月20日 17:12:27

     当你看见这个题目的时候,就应该知道平移缩放旋转手势和view对应的平移缩放旋转是两码事儿。也就是说如果我们想利用手势,对某个view进行某些操作,就必须明白两个问题,一是如何分辨和接收手势操作,二是如何根据接收到的手势对视图进行平移缩放旋转。

    一、先说说如何分辨和接收手势操作

    手机端的手势无非分为三种,就是题目中所提到的平移缩放旋转,ios有专门的类,来对应这三种手势。把这些手势绑定在那个view上,那一旦这个view触发了这个手势,我们该调哪个函数呢?这个问题问的好,在这些手势累初始化的时候,把其对应的view和触发后调用的的方法传进去,请看下边的示例代码:    

    UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc]//缩放手势
                                                       initWithTarget:self
                                                        action:@selector(handlePinch:)];//绑定方法
    [_scrollView addGestureRecognizer:pinchGestureRecognizer];   //绑定view
   
    //平移手势 
    UIPanGestureRecognizer  *moveGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self
                        
                                                               action:@selector(moveGesture:)];  
    moveGesture.delegate = self;
    
    [_scrollView addGestureRecognizer:moveGesture];
    
   
 
    //单指双击手势
    
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self
                       
                                                              action:@selector(singleTapGesture:)];
    
    tapGesture.numberOfTapsRequired = 2;
    
        self.tapGesture.delegate = self;
        [_scrollView addGestureRecognizer:tapGesture];

细心的同学,可能发现了这句话

 moveGesture.delegate = self;
手势的代理,如果我们把代理指向了自己,应该实现什么方法呢?具体先看看这个代理具体是什么样的吧?

@protocol UIGestureRecognizerDelegate <NSObject>
@optional
// called when a gesture recognizer attempts to transition out of UIGestureRecognizerStatePossible. returning NO causes it to transition to UIGestureRecognizerStateFailed
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

// called when the recognition of one of gestureRecognizer or otherGestureRecognizer would be blocked by the other
// return YES to allow both to recognize simultaneously. the default implementation returns NO (by default no two gestures can be recognized simultaneously)
//
// note: returning YES is guaranteed to allow simultaneous recognition. returning NO is not guaranteed to prevent simultaneous recognition, as the other gesture's delegate may return YES
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

// called once per attempt to recognize, so failure requirements can be determined lazily and may be set up between recognizers across view hierarchies
// return YES to set up a dynamic failure requirement between gestureRecognizer and otherGestureRecognizer
//
// note: returning YES is guaranteed to set up the failure requirement. returning NO does not guarantee that there will not be a failure requirement as the other gesture's counterpart delegate or subclass methods may return YES
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer NS_AVAILABLE_IOS(7_0);
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer NS_AVAILABLE_IOS(7_0);

// called before touchesBegan:withEvent: is called on the gesture recognizer for a new touch. return NO to prevent the gesture recognizer from seeing this touch
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

@end

上边是从UIKit中拷取的源码,很明显,手势不同的的状态会调用不同的方法,这个我们可以根据需要自己实现,反正是optional可选的。

那我能在某个视图上添加上手势了,然后也知道手势触发的方法了,之后要做的,就是从手势中提取相关的信息,然后对视图进行变换了,这个将在下篇文章中详述。


Android单点触控技术,对图片进行平移,缩放,旋转操作

相信大家使用多点对图片进行缩放,平移的操作很熟悉了,大部分大图的浏览都具有此功能,有些app还可以对图片进行旋转操作,QQ的大图浏览就可以对图片进行旋转操作,大家都知道对图片进行缩放,平移,旋转等操作...
  • xiaanming
  • xiaanming
  • 2015年01月19日 08:42
  • 40292

动画效果之渐变、缩放、平移、旋转<代码实现>

Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。 第二类就是 Frame动画,即顺序的播放事先做好的...
  • u012827205
  • u012827205
  • 2014年04月14日 13:31
  • 4780

[OpenGL] 桌子的平移、旋转和缩放

1)绘制立方体         考虑分别绘制六个面,先把每个正方形的坐标点存储在数组中,然后再利用循环完成绘制。(这样的绘制模式使一条边被绘制了两次,有一些优化的方法,为了逻辑更清晰没有进行优化)...
  • ZJU_fish1996
  • ZJU_fish1996
  • 2016年03月24日 22:20
  • 2264

iOS---transform类的使用,平移,缩放,旋转效果的实现

UIButton  *btn = (UIButton *)sender;         //----------平移------------     // CGAffineTransfo...
  • RIXIAOYUE
  • RIXIAOYUE
  • 2014年09月07日 10:46
  • 890

iOS图片添加平移/缩放/旋转多个手势

// // UIImageView+Utils.m // OpenWorkr // // Created by 冰凉的枷锁 on 2017/3/6. // Copyright © 2017年 ...
  • qq_25639809
  • qq_25639809
  • 2017年03月06日 12:06
  • 866

可手势缩放平移及旋转的ImageView

  • 2017年10月17日 00:22
  • 27.7MB
  • 下载

动画效果之渐变、缩放、平移、旋转<代码实现>

Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。 第二类就是 Frame动画,即顺序的播放事先做好的...
  • u012827205
  • u012827205
  • 2014年04月14日 13:31
  • 4780

动画效果之渐变、缩放、平移、旋转<代码实现>

转载自:http://blog.csdn.net/junhuahouse/article/details/23672191 Android 平台提供了两类动画。 第一类是Tween动画,...
  • SXS120730
  • SXS120730
  • 2017年12月15日 09:42
  • 114

android中手势操作图片的平移、缩放、旋转

在网上搜到很多都是一样的版本,只有平移和缩放的功能。我在搜到的源代码基础上添加了旋转和边界检查的功能。  代码主要分两部分,一个activity一个view,代码如下: package com.e...
  • happy_bug
  • happy_bug
  • 2012年08月22日 13:35
  • 32630

android中手势操作图片的平移、缩放、旋转

在网上搜到很多都是一样的版本,只有平移和缩放的功能。我在搜到的源代码基础上添加了旋转和边界检查的功能。  代码主要分两部分,一个activity一个view,代码如下: [java] ...
  • sdvch
  • sdvch
  • 2013年09月01日 17:06
  • 2554
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 利用平移缩放旋转手势对view实现对应的平移缩放旋转效果(一)
举报原因:
原因补充:

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