【问题标题】:Scaling up a UIImageView with a pinch gesture使用捏合手势放大 UIImageView
【发布时间】:2012-03-16 23:26:45
【问题描述】:

我正在使用捏合手势让用户增大/减小图像的大小。我暂时操纵 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),当捏合手势完成时会发生什么情况是图像视图扭曲成非常薄的矩形,没有任何旋转或缩放。

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

【问题讨论】:

    标签: iphone ios xcode ipad


    【解决方案1】:

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

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

    【讨论】:

    • 您好,“转换为身份”是什么意思?另外,你如何缩放框架,你的意思是使用捏手势缩放来操作 frame.size.width/height 而不是 CGAffineTransformScale?谢谢
    • 恒等变换基本上是一种不执行任何操作、不缩放、不旋转或倾斜的变换。通过缩放框架,我的意思是操纵框架大小,是的,但请记住,您必须相应地重新定位视图,最好通过在缩放之前保存 view.center 并在之后重新应用它
    【解决方案2】:

    添加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:

    【讨论】:

    • 感谢您的回复,但这是为了放大图像,对吗?整体规模没有扩大?
    • scrollview 的缩放比例将为您提供比例。一旦用户决定适当的比例,您就可以将其应用于图像。毕竟我们只需要给用户一种感觉,对吧?
    猜你喜欢
    • 2011-10-17
    • 2014-01-22
    • 2018-12-02
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多