使用捏合手势扩展UIImageView

时间:2012-03-16 23:26:45

标签: iphone ios xcode ipad

我使用捏合手势让用户增加/减少图像的大小。我暂时操纵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已应用于它们),当捏合手势完成时会发生的情况是,图像视图变形为非常薄的矩形,没有任何旋转或比例。

我认为我可以继续原始旋转并在框架设置后应用它,但我认为这不起作用。任何帮助表示赞赏。感谢

2 个答案:

答案 0 :(得分:1)

请注意,UIView documentation表示只要UIViews变换不是其身份变换,帧属性就会变为未定义且不应使用,因此不要依赖CGRect endFrame = ...来工作。 / p>

否则,如果您希望更改质量,只需将变换设置为identity,缩放框架然后重新应用变换以保持旋转。这应该可以正常工作。

答案 1 :(得分:1)

将imageview添加为scrollview的子视图,然后指定scrollview的委托,该委托要求viewtobezoomed作为imageview。它很容易解决它。

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