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可选的。

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


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

UIButton  *btn = (UIButton *)sender;         //----------平移------------     // CGAffineTr...

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

// // UIImageView+Utils.m // OpenWorkr // // Created by 冰凉的枷锁 on 2017/3/6. // Copyright © 2017年 ...

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

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

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

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

opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移

常常需要最图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标。 仿射变换...

Android 利用Matrix实现图片随手指平移、旋转、缩放

链接: Android 利用Matrix实现图片随手指平移、旋转、缩放—旋转 Android 利用Matrix实现图片随手指平移、旋转、缩放—缩放 Android 利用M...

Android 利用Matrix实现图片随手指平移、旋转、缩放

链接: Android 利用Matrix实现图片随手指平移、旋转、缩放—缩放 Android 利用Matrix实现图片随手指平移、旋转、缩放—平移 Android 利用...

七、Sketchup用ruby进行二次开发--利用Transformation实现Move工具(平移、旋转和缩放)

在Sketchup中,move工具使用的非常广泛,

【Android开发】View的平移、缩放、旋转以及位置、坐标系

图片并茂详细介绍View的Scroll、Scale、Translation、Rotation,看完之后,你将会熟悉scrollTo()、scrollBy()、setScrollX、setScrollY...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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