等比例放大+手势识别

最近学习了下手势操作,尤其是对缩放的研究,先记录下,
UIPinchGestureRecognizer主要是用来对图片或者对其它view进行缩放的。
- (void)viewdidload{
UIPinchGestureRecognizer *pinchRecognizer = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)] autorelease];
    [pinchRecognizer setDelegate:self];//需要在头文件中引入UIGestureRecognizerDelegate
    [self.pieChartLeft addGestureRecognizer:pinchRecognizer];
}
#pragma mark - UIGestureRecognizerDelegate Methods
- (void)scale:(UIPinchGestureRecognizer *)gestureRecognizer{
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
        int width = [gestureRecognizer view].frame.size.width;
        if ([gestureRecognizer scale]>1.f&&width<320) {
            [UIView animateWithDuration:1.f animations:^(void){
                                                        [gestureRecognizer view].transform = CGAffineTransformScale([[gestureRecognizer view] transform], 2.0, 2.0); 
                                                        }];
          
        } else if ([gestureRecognizer scale]<1.f&&width>174) {
            [UIView animateWithDuration:1.f animations:^(void){
                                                        [gestureRecognizer view].transform = CGAffineTransformScale([[gestureRecognizer view] transform], 0.5, 0.5);
            }];
        }
        [gestureRecognizer setScale:1];
    }
}
其中这个scale我是写死的,因为我的需求是手指捏合的时候回到原始大小,放大的时候全屏大小,如果想随着手指的分开和捏合来不断改变的话,借用官方的文档的写法,应该是:
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
        [gestureRecognizer view].transform = CGAffineTransformScale([[gestureRecognizer view] transform], [gestureRecognizer scale], [gestureRecognizer scale]);
        [gestureRecognizer setScale:1];
    }
这个1相当于原始大小,如果[gestureRecognizer scale]的值小于1表示两手指间的距离在不断地缩小,大于1表示两手指间的距离不断地变大,
另外需要说明的是我写死的这个scale,它是指的是,当前的视图的大小和你想要变化之后视图的大小的比例

你可能感兴趣的:(等比例放大+手势识别)