UIImageView.layer的转换会影响UIScrollView zoomScale

时间:2012-07-23 16:04:14

标签: ios uiscrollview uiimageview transform calayer

我在UIScrollView中有一个UIImageView。我使用以下代码将图像加载到UIImageView的CALayer中:

UIImage *image = [UIImage imageNamed: fileToDisplay];    
NSLog(@"If I don't flip image imageScrollView.zoomScale: %f", imageScrollView.zoomScale);
[[imageView layer] setContents: (id)image.CGImage];
if (flipped)
{
    [[imageView layer] setTransform: CATransform3DMakeRotation(180.0 / 180.0 * M_PI, 0.0, 1.0, 0.0)];
    NSLog(@"If image flipped imageScrollView.zoomScale: %f", imageScrollView.zoomScale);
}

我正在'翻转'关于y轴的图像。意外的事件是imageView.layer的转换正在改变imageScrollView.zoomScale,如下面的输出所示:

如果我没有翻转图像imageScrollView.zoomScale:0.465455

如果图像翻转imageScrollView.zoomScale:1.000000

我的问题是如何让这件事不发生?如果没有办法打败这种行为,我需要做些什么来实现对我不翻转的图像执行的图像取景。换句话说,只是将zoomScale设置为变换前的值不起作用。 UIScrollView中的其他内容已更改(不是contentSize或contentOffset)。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

由于您使用的是CATransform3DMake...方法,因此您需要创建新的转换并替换当前的转换。您需要使用CATransform3DRotate来将旋转添加到当前变换(用于比例)。

imageView.layer.transform = CATransform3DRotate(imageView.layer.transform , 180.0 / 180.0 * M_PI, 0.0, 1.0, 0.0);