2012-03-16 102 views
1

我使用捏手势让用户增加/减少图像的大小。我临时操作CGAffineTransform让用户使用缩放比例,然后撤消它并设置帧大小,以便图像以质量进行缩放(CGAffineTransformScale对图像质量没有影响,只会伸出图像)。用缩放手势缩放UIImageView

-(void)handlePinch:(UIPinchGestureRecognizer *)recognizer{ 
    if(recognizer.state == UIGestureRecognizerStateBegan){ 
     self.alpha = 0.7; 
     startingTransform = self.transform; 
    } 
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale); 
    recognizer.scale = 1; 
    if (recognizer.state == UIGestureRecognizerStateEnded){ 
     self.alpha = 1.0; 
     CGRect endFrame = self.frame; 
     self.transform = startingTransform; 
     self.frame = endFrame; 
     //self.transform = CGAffineTransformRotate(self.transform, acos(startingTransform.c)); //reapply rotation? 
    } 
} 

问题:我的代码的问题是,它不占旋转。我的一些图像开始旋转(先前将CGAffineTransformRotate应用于它们),当捏合手势完成时会发生什么情况是图像视图变成了非常细的矩形,没有任何旋转或缩放。

我以为我可以继续原有的旋转,并应用它后框架设置,但我不认为这是行得通。任何帮助表示赞赏。谢谢

回答

1

请注意UIView documentation表示只要UIViews变换不是它的标识转换,frame属性就变得不确定,不应该使用,所以不要依赖CGRect endFrame = ...来工作。否则,如果您想要改变质量,只需将变换设置为标识,缩放框架,然后重新应用变换以保持旋转。这应该很好。

+0

嗨,“转化为身份”是什么意思?此外,你如何缩放框架,你的意思是使用捏手势缩放来操纵frame.size.width/height而不是CGAffineTransformScale?谢谢 – user339946 2012-03-16 23:49:49

+0

身份转换基本上是一种无所作为,不缩放,旋转或倾斜的转换。通过缩放框架我的意思是操纵帧大小,是的,但请记住,你将不得不重新定位相应的视图,最好通过保存view.center之前缩放和重新应用它 – Ahti 2012-03-19 02:20:44

1

将imageview添加为scrollview的子视图,然后指定要求视图的视图的滚动视图的代表作为imageview。它会很容易解决它。

http://developer.apple.com/library/ios/documentation/uikit/reference/uiscrollviewdelegate_protocol/Reference/UIScrollViewDelegate.html#//apple_ref/occ/intfm/UIScrollViewDelegate/viewForZoomingInScrollView

+0

感谢您的答复,但这是为了缩放进入图像,正确?整体规模不扩大? – user339946 2012-03-17 21:05:53

+0

scrolview的缩放比例会给你比例。一旦用户决定适当的比例,您可以将其应用于图像。毕竟,我们必须给用户的感觉,对吧? – 2012-03-18 05:09:37