让视图暂时扩展以填充iPhone屏幕的最佳方式

时间:2009-03-24 17:54:52

标签: iphone uiview

我有一个以编程方式构建UIView的库,它展示了我的自定义行为。可以将此库放入视图层次结构中不同位置的许多不同应用程序中。在某些情况下,视图需要“扩展”以填补屏幕空间。我目前通过让我的代码遍历视图层次结构直到找到没有父级的视图,构建新视图并将其作为找到的视图的子视图插入,然后在两者之间执行动画过渡来完成此操作。退出新视图只是隐藏它的问题,它恢复了以前的状态。

我有两个问题。

  1. 有更好的方法吗? (特别是,我真的不喜欢像那样遍历视图层次结构。)
  2. 这种方法会发生什么不好的事情?例如,可能出错的一件事是先前显示的视图不知道这已发生,因此可能表现不正常。 (这可以通过为此行为发明委派协议或使用我目前不知道的现有协议来解决。)
  3. 显然,这里的目标是让包含的应用程序/视图/控制器尽可能少地完成,而不是创建一个矩形并构建我的视图控制器。

3 个答案:

答案 0 :(得分:1)

为什么不直接调用presentModalViewController?默认情况下,这会从底部动画到屏幕上,但您可以通过传递NO作为动画选项然后控制自己来阻止这种情况。

这是视图/控制器/应用程序暂时将UI控制权交给另一个模块的设计方式。

答案 1 :(得分:1)

安德鲁,我认为他不这样做,因为他不想要幻灯片动画。

顶级视图是UIWindow;您可以通过调用[UIApplication sharedApplication].keyWindow获取密钥(当前)窗口。 (几乎所有应用程序只有一个窗口。)除此之外,向上查看视图层次结构是完全合法的。

编辑:我刚刚注意到UIView有一个window属性可以直接进入视图窗口,所以你根本不需要走层次结构。

至于发生的坏事,除非应用程序的其他部分决定添加或删除关键窗口的直接子视图,否则我无法想到任何事情。另一个可能的问题可能是当您添加视图时文本字段是第一个响应者;键盘可能保持在您的视图之上。

答案 2 :(得分:0)

ddoughty,

我制作了一个youtube教程,展示了如何在Facebook iPhone应用程序中扩展和缩小视图。

希望它可以提供一些帮助:How to make expanding/shrinking views on iPhone SDK

亚当