【问题标题】:Passing a reference of a UIView to the next UIViewController将 UIView 的引用传递给下一个 UIViewController
【发布时间】:2012-05-18 07:23:30
【问题描述】:

我有一个应用程序,我试图在导航转换期间将UIScrollView 从一个UIViewController 传递到下一个。我试图弄清楚我应该使用哪些方法从其superview 中删除UIScrollView,然后将其附加到新的UIViewController

我在第一个UIViewControllerviewDiDisappear / viewWillDisappear 方法和第二个UIViewControllerviewDidAppear / viewWillAppear 方法中做了一个NSLog,这是我得到的顺序:

viewWillDisappear
viewWillAppear
viewDidDisappear
viewDidAppear

我的问题是,我是否可以期望这对于所有转换都保持一致,或者这些转换是否在不同的线程上运行并基于某些事物的加载时间,它们会有所不同吗?

编辑:碰撞

【问题讨论】:

  • 似乎是一个合理的问题,动机可疑。两个视图控制器不能各自拥有自己的滚动视图是否有原因?像这样移动视图似乎是自找麻烦,例如您必须在任何给定时间协调哪个控制器具有滚动视图。如果滚动视图只是程序中其他地方存储的数据的反映,那么很难理解为什么每个视图都不能拥有自己的。
  • @caleb - 复制一个可缩放并具有图像的 UIScrollView 真是太痛苦了,因为您可以将内容偏移滚动到半像素,但是当您手动设置它时它将它四舍五入到接近像素。我已经想出了如何通过仅设置图像视图而不滚动或缩放它来做到这一点,但是由于我在视图控制器之间传递数据,即如果用户按下后退按钮,我无论如何都必须发回一些信息,所以它更容易。

标签: iphone objective-c ios cocoa-touch uiviewcontroller


【解决方案1】:

好吧,要问自己的正确问题是:您的 viewController 何时可见/显示?

UIViewController A

UIViewController B

UIScrollView C

1: A:viewWillDisappear -> A可见,B不可见(C必须在A中)

2: B:viewWillAppear -> A可见,B不可见(C必须在A中)

2 到 3 过渡:A 和 B 都可见

3: A:viewDidDisappear -> A不可见,B可见(C必须在A中)

4: B:viewDidAppear -> A不可见,B可见(C必须在B中)

正如您所看到的,在转换过程中有一段时间,两个视图控制器视图都可见,因此您不能只将 C 从 a 移动到 b,您可能会想到一种解决方法...

也许你可以对A进行截图并将其添加到所有对象的A中,然后将C移动到B并进行过渡

或者您可以在 A 中淡出 C,进行过渡,然后在 B 中淡入 C...

【讨论】:

    【解决方案2】:

    实际上,当您尝试将视图添加为子视图时,并且它已经有一个超级视图,它将在添加到新的超级视图之前从其原始超级视图中删除(根据文档:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html).. . 所以不用像我想象的那样担心这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多