UIImageView
中有一个UIScrollView
,contentOffset
属性有问题。根据Apple的参考,这被定义为:
contentOffset :内容视图的原点偏离滚动视图原点的点。
例如,如果图像位于屏幕的左上角,如下所示,则contentOffset将为(0,0):
_________
|IMG |
|IMG |
| |
| |
| |
| |
---------
对于设备旋转,我有以下设置:
scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
imageView.contentMode = UIViewContentModeCenter;
scrollView.contentMode = UIViewContentModeCenter;
这将使一切都围绕屏幕中心旋转。 旋转屏幕后,屏幕将如下所示:
______________
| IMG |
| IMG |
| |
--------------
我的问题是,如果我现在读到contentOffset
,它仍然是(0,0)。 (如果我在横向模式下移动UIImage,contentOffset
的值会更新,但会根据错误的原点进行计算。)
有没有办法计算UIImage相对于屏幕左上角的坐标。当屏幕处于视图的初始方向时,contentOffset
似乎只返回此值。
我试过阅读self.view.transform
和scrollView.transform
,但它们始终是身份。
答案 0 :(得分:3)
以下是一种方法:滚动视图集
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth
| UIViewAutoresizingFlexibleHeight);
scrollView.contentMode = UIViewContentModeTopRight;
即使旋转行为不正确,UIViewContentModeTopRight
模式也会将左上角保持在坐标(0,0)。要获得与UIViewContentModeCenter相同的旋转行为,请添加
scrollView.contentOffset = fix(sv.contentOffset, currentOrientation, goalOrientation);
进入willAnimateRotationToInterfaceOrientation
。 fix
是函数
CGPoint fix(CGPoint offset, UIInterfaceOrientation currentOrientation, UIInterfaceOrientation goalOrientation) {
CGFloat xx = offset.x;
CGFloat yy = offset.y;
CGPoint result;
if (UIInterfaceOrientationIsLandscape(currentOrientation)) {
if (UIInterfaceOrientationIsLandscape(goalOrientation)) {
// landscape -> landscape
result = CGPointMake(xx, yy);
} else {
// landscape -> portrait
result = CGPointMake(xx+80, yy-80);
}
} else {
if (UIInterfaceOrientationIsLandscape(goalOrientation)) {
// portrait -> landscape
result = CGPointMake(xx-80, yy+80);
} else {
// portrait -> portrait
result = CGPointMake(xx, yy);
}
}
return result;
}
上面的代码将使滚动视图围绕屏幕中心旋转,并确保左上方的corder始终是坐标(0,0)。