我使用捏合手势让用户增加/减少图像的大小。我暂时操纵CGAffineTransform以让用户使用比例,然后只需撤消它并设置帧大小,使图像按质量进行缩放(CGAffineTransformScale不会对图像质量产生任何影响,只会拉伸图像)。
-(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已应用于它们),当捏合手势完成时会发生的情况是,图像视图变形为非常薄的矩形,没有任何旋转或比例。
我认为我可以继续原始旋转并在框架设置后应用它,但我认为这不起作用。任何帮助表示赞赏。感谢
答案 0 :(得分:1)
请注意,UIView documentation表示只要UIViews变换不是其身份变换,帧属性就会变为未定义且不应使用,因此不要依赖CGRect endFrame = ...
来工作。 / p>
否则,如果您希望更改质量,只需将变换设置为identity,缩放框架然后重新应用变换以保持旋转。这应该可以正常工作。
答案 1 :(得分:1)
将imageview添加为scrollview的子视图,然后指定scrollview的委托,该委托要求viewtobezoomed作为imageview。它很容易解决它。