如何在加速时从我的视图控制器外包视图更改操作?

Posted

技术标签:

【中文标题】如何在加速时从我的视图控制器外包视图更改操作?【英文标题】:How can I outsource view-change-operations from my view controller upon accelerations? 【发布时间】:2009-05-05 21:13:37 【问题描述】:

我有一个视图控制器类。当加速度计检测到运动并在委托对象中调用加速度计:didAccelerate:方法时,我想在我的视图中做一些事情。

那个委托对象是我脑子里的问题。目前,我的大脑被冻结了,我不知道有什么更好的方法。让我知道你的想法!

解决方案 1) 在我的视图控制器类中,我符合 UIAccelerometerDelegate 协议,并实现了 accelerometer:didAccelerate: 方法。 在我的 AppDelegate 类的 -applicationDidFinishLaunching: 方法中,我将该视图控制器对象设置为接收加速方法调用的委托。我认为这不是很好。

解决方案 2) 我创建了一个名为 AccelerationDelegate 的空白新对象,符合该 UIAccelerometerDelegate 协议,实现该 accelerometer:didAccelerate: 方法,并在我的 AppDelegate 类的 -applicationDidFinishLaunching: 方法中将该视图控制器对象设置为接收加速方法调用的委托。

但是对于解决方案 2,我的大脑有点卡住了!如何从该对象内的视图控制器访问视图对象?

这里的问题是,我周围有不止一个视图控制器。我使用标签栏控制器在它们之间切换。

有什么建议可以让我做到这一点吗?

【问题讨论】:

【参考方案1】:

我同意第二种方法更好。您是否只想访问当前选定的选项卡视图,或者只是您应用中的特定视图。

无论如何,我要做的就是在您的UIApplicationDelegate 中为您的UITabViewController 设置属性,以便您可以从代理访问它(您可以通过调用[[UIApplication sharedApplication] delegate] 获取应用代理)。例如:

YourApplicationDelegate *appDelegate = (YourApplicationDelegate *)[[UIApplication sharedApplication] delegate];
FirstUIViewController *firstViewController = appDelegate.firstViewController;
[firstViewController doStuff];

firstViewController 是您委托的属性。

【讨论】:

谢谢。我想访问 UIScrollView 中的视图(具体:UIImageView 对象)。【参考方案2】:

如果您的加速特定于一个视图控制器,那么让视图控制器接收更改其自己的子视图所需的信息是有意义的。但是,最好在视图出现时将视图控制器设置为委托,并在视图消失时将委托设置为 null。 (具体来说,- (void) viewWillAppear:- (void) viewWillDisappear:

【讨论】:

关于释放代表的重要信息。我什至没有想到这一点,但这是我在 .Net 世界中一直在做的事情,所以我应该这样做。谢谢!

以上是关于如何在加速时从我的视图控制器外包视图更改操作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 UIpageviewcontroller 导航页面时从另一个视图控制器自动更新视图控制器上的标签

如何在单击按钮时从一个视图控制器导航到另一个视图控制器?

从导航堆栈中弹出视图控制器时从右侧滑入

如何在 ajax 调用时从 laravel 控制器函数返回视图?

如何从我的视图控制器引用我的 App Delegate 中的 managedObjectContext?

如何从我的主视图控制器访问 UIView 中的 let 语句?