图像的边界滚动中的视图旋转视图



我有一个全屏UIScrollView来显示我的图像,它使用了一些来自苹果示例代码 PhotoScroller.app 的代码。我对带有旋转的滚动视图中的图像视图和转换点的边界有点困惑。任何帮助将不胜感激!

附言。有关更多详细代码,请参阅边界中心

NSLog 在调用中将旋转到接口方向:持续时间:

2012-05-12 11:35:45.666 imageScrollView frame X and Y are 0.000000 and 0.000000 
2012-05-12 11:35:45.672 imageScrollView frame Width and Height are 320.000000 and 480.000000 
2012-05-12 11:35:45.677 imageScrollView bounds origin X and Y are 0.000000 and 0.000000 
2012-05-12 11:35:45.682 imageScrollView bounds Width and Height are 320.000000 and 480.000000 
2012-05-12 11:35:45.686 imageView frame origin X and Y are 0.000005 and 0.374437
2012-05-12 11:35:45.689 imageView frame size Width and Height are 320.000000 and 479.251129
2012-05-12 11:35:45.693 imageView bounds origin X and Y are 0.000000 and 0.000000
2012-05-12 11:35:45.697 imageView bounds size Width and Height are 641.000000 and 959.999939
2012-05-12 11:35:45.701 boundsCenter X and Y are 160.000000 and 240.000000 
2012-05-12 11:35:45.705 convertPoint origin X and Y are 320.500000 and 479.999969

NSLog in call willAnimateRotationToInterfaceOrientation:duration:

2012-05-12 11:36:05.975 imageScrollView frame X and Y are 0.000000 and 0.000000 
2012-05-12 11:36:05.978 imageScrollView frame Width and Height are 480.000000 and 320.000000 
2012-05-12 11:36:05.983 imageScrollView bounds origin X and Y are 0.000000 and 0.000000 
2012-05-12 11:36:05.987 imageScrollView bounds Width and Height are 480.000000 and 320.000000 
2012-05-12 11:36:05.990 imageView frame origin X and Y are 80.000008 and 0.000017
//I am confused here. Why is the X is 80.000008, and Y is 0.000017, but not (80, -120)?
2012-05-12 11:36:05.994 imageView frame size Width and Height are 320.000000 and 479.251099
2012-05-12 11:36:06.002 imageView bounds origin X and Y are 0.000000 and 0.000000
2012-05-12 11:36:06.006 imageView bounds size Width and Height are 641.000000 and 959.999878
2012-05-12 11:36:06.009 boundsCenter X and Y are 240.000000 and 160.000000 
2012-05-12 11:36:06.014 convertPoint origin X and Y are 320.500000 and 320.499969

关于自动调整大小配置:

actionSheetCoverView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
imageScrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
imageView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;

旋转前的图像视图帧原点(NSLog in willRotateToInterfaceOrientation:duration(是(0, 0(,旋转后(NSLog in willAnimateRotationToInterfaceOrientation:duration:(,我认为应该是(80,-120(。但它是(80.000008,0.000017(;

frame 属性始终返回基于 UIView 的boundscentertransform属性的计算值。

根据Apple的UIView文档:

如果 transform 属性不是标识转换,则 frame 属性的值未定义,因此应忽略。

问题是您在旋转动画开始时读取 frame 属性,这意味着您的视图将具有非标识transform值,从而使其frame值毫无意义。

您可以根据另一个问题中的代码记录转换值:

NSLog(@"imageScrollView transform %@", NSStringFromCGAffineTransform(self.transform));
NSLog(@"imageView transform %@", NSStringFromCGAffineTransform(imageView.transform));

这将在旋转时显示转换属性。 如果您不熟悉身份转换,则[1, 0, 0, 1, 0, 0] .

换句话说,frame属性为您提供意外值的原因是您的视图应用了transform,从而使frame属性毫无意义。

目前尚不清楚您实际上想要实现的目标,但来自同一Apple文档的其他注释可能会有所帮助:

如果 transform 属性包含非标识转换,则 frame 属性的值未定义,不应修改。在这种情况下,可以使用 center 属性重新定位视图,并改为使用 bounds 属性调整大小。

正如我所解释的,当你不说出你为什么感到困惑或你试图做什么时,很难帮助你。

要获取图像视图的实际中心,您可以使用以下内容:

imageView.center

最新更新