获取横向视图的中心屏幕位置

时间:2012-01-23 18:01:09

标签: objective-c ios ipad orientation landscape

目前我在窗口内有一个UIImageView。当场景加载时,我用以下方法保存其位置:

imageView.center

用户可以拖动它。在某些情况下,项目会被动画回原始位置并保存。当我垂直握住IPad时,一切正常。

当我水平握住它但我无法将其移回到该位置时,因为在横向模式下我无法使用在垂直方向模式下保存的位置。这是因为在Interface Builder中我将项目设置为相对于边框自动调整大小(意味着如果项目位于中心,然后旋转IPad它仍然保持在中心位置)

所以我的问题是:如何才能获得项目在横向方向上的正确原始位置?

我试图像这样用手计算位置:

- (CGPoint)getHorizontalCoordinatesForPoint:(CGPoint)point
{
    CGSize size = [[UIScreen mainScreen]applicationFrame].size;
    CGFloat relativeX = (point.x / (size.width));
    CGFloat relativeY = point.y / (size.height);
    CGFloat horizontalScreenX = relativeX * (size.height);
    CGFloat horizontalScreenY = relativeY * (size.width);
    return CGPointMake(horizontalScreenX, horizontalScreenY);
}

但这个位置有点偏。我认为这是因为我没有考虑导航栏的大小。在ios中是否有一些转换功能已经做了我想做的事情?

1 个答案:

答案 0 :(得分:1)

别。

而不是在场景加载时保存[imageView center],而是将其保存在关键点:

-touchesBegan:withEvent :(或者,如果您使用手势识别器,则在手势识别器回调中)。

-didRotateFromInterfaceOrientation:

如果用户在横向工作,退出应用程序,旋转肖像以及重新启动应用程序,会发生轻微的复杂情况。在这种情况下,我会在横向启动应用程序,让自动旋转到纵向并启动中心点。