从其 superView 中删除 UIView 并将其框架扩展到全屏

Posted

技术标签:

【中文标题】从其 superView 中删除 UIView 并将其框架扩展到全屏【英文标题】:Removing a UIView from its superView and expanding its frame to full screen 【发布时间】:2011-01-12 19:49:51 【问题描述】:

我有一个对象,它是 UIView 的子类,可以作为子视图添加到视图层次结构中。我希望能够从其 superView 中删除 UIView 并将其添加为主窗口的子视图,然后展开到全屏。

类似的东西:

// Remove from superView and add to mainWindow
[self retain];
[self removeFromSuperView];
[mainWindow addSubView:self];

// Animate to full screen
[UIView beginAnimations:@"expandToFullScreen" context:nil];
[UIView setAnimationDuration:1.0];
self.frame = [[UIScreen mainScreen] applicationFrame];
[UIView commitAnimations];

[self release];

首先,我是否在正确的路线上?其次,是否有一种简单的方法让对象获得指向主窗口的指针?

谢谢

戴夫

【问题讨论】:

回答你的第二个问题:UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow]; 【参考方案1】:

你可以使用视图的 window 属性

self.window

【讨论】:

干杯安德烈,完全错过了那个。这也使得从 superView 中删除非常容易,因为视图只能有一个超级视图。因此,只需 [self.window addSubView:self] 似乎就可以解决问题,而无需保留和 removeFromSuperView。问候戴夫。【参考方案2】:

看起来不错。但您可能希望在开始动画之前将视图的框架从其父视图坐标系转换为窗口坐标系。否则动画会不流畅。

【讨论】:

嗨,克里斯,有没有办法在视图层次结构中获取视图相对于主窗口而不是其超级视图的坐标? frame 属性是相对于父视图的,这是否意味着我必须遍历树并手动计算坐标? UIView 有一个方便的转换方法:[UIView convertRect:toView:](主窗口也是一个视图)developer.apple.com/library/ios/ipad/#documentation/uikit/…。 完美,谢谢克里斯,非常有帮助。已投票支持您的 cmets。戴夫

以上是关于从其 superView 中删除 UIView 并将其框架扩展到全屏的主要内容,如果未能解决你的问题,请参考以下文章

从 Superview 中删除子视图

modalViewController 从 superview 中移除后 UIView 消失

从它自己的 UView 子类中添加 UIView 作为 SuperView 子视图

如何根据superView设置UIView大小

addSubView - 在 UIView 中添加一个按钮也会为其 SuperView 添加相同的按钮

从 UIImageView 传递触摸到 superview