旋转后缩放图像

时间:2012-04-09 00:45:38

标签: objective-c ios uiscrollview uiimage rotation

我在UIScrollView中有一个图像,我可以放大和缩小。 我有一个按钮,让用户将图像旋转90度:

(void)RotateImage {
    CGAffineTransform rotateTrans = CGAffineTransformMakeRotation(-90.0 / 180.0 * 3.14);
    BaseImg.transform = rotateTrans;
}

旋转成像后,我无法放大和缩小..图像在屏幕上变得疯狂并返回到UNRotated状态。

我做错了什么?代码示例会很棒! 谢谢:))

2 个答案:

答案 0 :(得分:1)

UIScrollView喜欢接管它包含的视图的转换。有两种解决方案:

  1. 在不更改包含视图的情况下旋转图像。
  2. 创建一个UIView子类,在子层中显示图像。
  3. 旋转图片,请参阅How to Rotate a UIImage 90 degrees?。如果您始终只进行90度旋转,请参阅@Peter Sarnowski's solution。为了使其适应您在此处所做的事情,假设BaseImgUIImageView

    - (void) rotateImage
    {
        UIImage *sourceImage = [baseImg image];
        UIImage *rotatedImage = [UIImage imageWithCGImage:[sourceImage CGImage] scale:1.0 orientation:UIImageOrientationRight];
        [baseImg setImage:rotatedImage];
    }
    

    这只会旋转一次。要使rotateImage重复工作,请读取现有的orientation属性,然后按顺时针或逆时针顺序将其移动到下一个属性。

    如果图片不是方形,您可能还需要调整baseImg的大小以反映其新的宽高比。

    创建UIView子类,您需要将CALayer存储为视图层的子层。将图像存储在子图层中,并随意转换子图层。这样更快,并允许任意旋转,但您需要计算自己的缩放比例,以防止旋转图像超出视图范围。

答案 1 :(得分:0)

要简单地旋转图像,代码是完美的,但要添加放大和缩小,然后添加旋转,您需要保留其变换。这是一个可以帮助您的示例代码。

https://github.com/elc/iCodeBlogDemoPhotoBoard