UIScrollView 喜欢接管它包含的视图的转换。有两种解决方案:
- 旋转图像而不更改包含视图。
- 创建一个在子层中显示图像的 UIView 子类。
要旋转图像,请参阅如何将 UIImage 旋转 90 度?. 如果您总是且仅进行 90 度旋转,请参阅@Peter Sarnowski 的解决方案。为了适应你在这里所做的事情,假设BaseImg
是UIImageView
:
- (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
为视图层的子层。将图像存储在子层中,并随意变换子层。这更快,并且允许任意旋转,但您需要计算自己的缩放以防止旋转图像超出视图边界。