为什么我必须以任意数量重新定位这个UIView?

时间:2010-09-28 00:47:33

标签: iphone cocoa-touch uikit core-graphics

我正在构建一个必须在滚动视图完成缩放后添加叠加视图的应用程序。我在滚动视图本身添加叠加层并保持位置一致时遇到了问题,因为我假设滚动视图没有进行缩放...没有大...所以我决定将叠加层添加到sharedApplication的keyWindow。

现在,应用程序处于横向,我必须对叠加层进行转换才能使其正确定位...这很好。问题出现在必须通过这个看似随意的数量重新定位叠加层以使其居中...我不喜欢像这样特别做事,所以我想我会问是否有人遇到过这样的事情,为什么这个观点必须通过这个奇怪的偏移重新定位。任何见解都会很棒。

CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI/2);
tempOverlay.view.transform = transform;

// Repositions and resizes the view.
CGRect contentRect = CGRectMake(-107, -80, 480, 320); //where does this offset come from?!?
tempOverlay.view.bounds = contentRect;

[[[UIApplication sharedApplication] keyWindow] addSubview:tempOverlay.view];

1 个答案:

答案 0 :(得分:0)

我原本打算发布这个评论而不是答案,但我会选择回答路线,即使我认为这里还没有足够的信息。以下假设你有一个相当标准的iOS应用程序,除了你将视图附加到keyWindow的重叠奇怪之外。

首先,不要将您的叠加视图添加到keyWindow。而是在根视图控制器上定义一些请求显示叠加层的方法。然后在根视图控制器代码中,将覆盖视图添加到控制器视图的上方。

然后,不要应用变换,因为不再需要旋转视图。

在您创建视图时,将其frame设置为根控制器视图的bounds。还可以通过UIView的autoresizingMask将其设置为具有灵活的宽度和高度。然后假设您的根UIView将其autoresizesSubview属性设置为YES,您的叠加视图将很好地调整大小以匹配根视图的大小,因为它会改变方向。

如果毕竟这个覆盖UIView内容的位置不正确,那么我怀疑问题是在UIView的内容范围内,并且与任何幻数的需要无关在你的框架/边界。

注意:我实际上没有尝试过上述内容,并且我并非100%自信,一般来说,你的根UIView会喜欢在它上面放置这个额外的叠加UIView,另一方面,它可能仍然没有意识到它,一切都会正常工作。无论哪种方式,对我来说,感觉要比你目前要做的那样“特别”。