欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

假造(pinch)手势

更新时间: 2014-01-05 02:34:21 责任编辑: Author_N1

 

捏合(pinch)手势

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

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

1. UIGestureRecognizerStateBegan 

2. UIGestureRecognizerStateChanged 

3. UIGestureRecognizerStateEnded 


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

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

代码如下:

//
//  ViewController.m
//  捏合手势
//
//  Created by Rio.King on 13-11-2.
//  Copyright (c) 2013年 Rio.King. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property(nonatomic, strong)UIPinchGestureRecognizer *pinchGestureRecognizer;
@property(nonatomic, strong)UILabel *myBlackLabel;
@property(nonatomic, unsafe_unretained)CGFloat currentScale;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	
    CGRect labelRect = CGRectMake(0, 0, 200, 200);
    self.myBlackLabel = [[UILabel alloc] initWithFrame:labelRect];
    self.myBlackLabel.center = self.view.center;
    self.myBlackLabel.backgroundColor = [UIColor grayColor];
    /*without this line,the pinch gesture recognizer will not work*/
    self.myBlackLabel.userInteractionEnabled = YES;
    [self.view addSubview:self.myBlackLabel];
    
    /*create the pinch Gesture Recognizer*/
    self.pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinches:)];
    [self.myBlackLabel addGestureRecognizer:self.pinchGestureRecognizer];
}

-(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)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

运行结果如下:

            


上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:34:21
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/11609/
本文WWW.DOC100.NET DOC100.NET版权所有。