3

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

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

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

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

4

2 回答 2

1

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

  1. 旋转图像而不更改包含视图。
  2. 创建一个在子层中显示图像的 UIView 子类。

旋转图像,请参阅如何将 UIImage 旋转 90 度?. 如果您总是且仅进行 90 度旋转,请参阅@Peter Sarnowski 的解决方案。为了适应你在这里所做的事情,假设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为视图层的子层。将图像存储在子层中,并随意变换子层。这更快,并且允许任意旋转,但您需要计算自己的缩放以防止旋转图像超出视图边界。

于 2012-04-09T01:47:52.617 回答
0

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

https://github.com/elc/iCodeBlogDemoPhotoBoard

于 2012-04-09T05:35:53.917 回答