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,它是指的是,当前的视图的大小和你想要变化之后视图的大小的比例
转载于:https://my.oschina.net/GfXFJnifklm/blog/174289