注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

实现手势识别(六)  

2013-05-09 22:53:59|  分类: ios开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

检测捏合手势

你希望用户可以在一个 view 上进行捏合手势操作。

创建一个 UIPinchGestureRecognizer 类的实例话对象,然后把这个对象添加到你的视图 中去

通过捏合手势动作可以很轻松的来改变视图元素的一个比例,例如,我们在通过 Safari 浏览器打开网页的时候,有时间为了能够更清晰的看到其中的一些文字,那么我们就需要放 大我们的屏幕了,有时候我们又需要缩放页面。

  手势的动作状态有如下三种,一般是按照顺序来进行转换的。

1. UIGestureRecognizerStateBegan 2. UIGestureRecognizerStateChanged 3. UIGestureRecognizerStateEnded

一旦捏合手势动作产生了之后,我们就需要在捕获的事件中进行一个页面调整。其中有 两个比较重要的变量 scale velocity,前者是一个比例范围,后者是一个变化速率的,也就 是说每次变化的一个像素点。 

代码如下:

#import <UIKit/UIKit.h>


@interface ViewController : UIViewController


@property (nonatomic,strong) UIPinchGestureRecognizer *pinchGestureRecognizer;

@property (nonatomic,strong) UILabel *myBlackLabel;

@property (nonatomic,unsafe_unretained) CGFloat currentScale;


@end


--------------

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void) handlePinches: (UIPinchGestureRecognizer *) paramSender

{

    if (paramSender.state == UIGestureRecognizerStateEnded)

    {

        self.currentScale = paramSender.scale;

    }

    else if (paramSender.state == UIGestureRecognizerStateBegan && self.currentScale != 0.0f)

    {

        paramSender.scale = self.currentScale;

    }

    

    if (paramSender.scale != NAN && paramSender.scale != 0.0)

    {

        paramSender.view.transform = CGAffineTransformMakeScale(paramSender.scale, paramSender.scale);

    }

}


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    self.view.backgroundColor = [UIColor whiteColor];

    CGRect labelRect = CGRectMake(0.0f, 0.0f, 200.0f, 200.0f);

    self.myBlackLabel = [[UILabel alloc] initWithFrame:labelRect];

    self.myBlackLabel.center = self.view.center;

    self.myBlackLabel.backgroundColor = [UIColor blackColor];

    self.myBlackLabel.userInteractionEnabled = YES;

    [self.view addSubview:self.myBlackLabel];

    self.pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinches:)];

    [self.myBlackLabel addGestureRecognizer:self.pinchGestureRecognizer];

}




- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


由于 scale 这个属性的值是每次都在变的,所以我们需要用另外一个变量来保存当前的 一个 scale 的值,这个变量叫做 currentScale,这样我们就行进行一个缩小,变大的视图效果了 

  评论这张
 
阅读(60)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017