如何在具有单独视图的控制器中使用加速度计?

Posted

技术标签:

【中文标题】如何在具有单独视图的控制器中使用加速度计?【英文标题】:How can the accelerometer be used in a controller with a separate view? 【发布时间】:2010-03-23 16:04:15 【问题描述】:

我正在尝试让加速度计在单独的视图中检测抖动,但没有调用加速度计方法?

当我在控制器 viewDidLoad 方法中放置代码以设置加速度计属性并在实现文件中添加 ......didAccelerate:(UIAcceleration *) 加速度时,检测到控制器抖动。

我是 iphone 开发的新手,认为可能是代码:

accelerometer.delegate = self;

应该指向视图?而不是自己?

任何帮助将不胜感激。我真的不知道如何解决这个问题?

【问题讨论】:

【参考方案1】:

如果您的加速度计回调方法未被调用,则很有可能您的应用程序委托(或其他自定义类)不支持 UIAccelerometerDelegate 类。一些非常松散的伪代码,用于在您的应用程序委托中进行该声明...

@interface MyApplicationDelegate: UIApplicationDelegate<UIAccelerometerDelegate>

   .. class definition stuff ..

在此处查看 Apple 文档...

http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedFeatures/AdvancedFeatures.html

并查看访问加速度计事件部分

【讨论】:

谢谢 Rob :) 我快到了,希望它很快就能工作。问题是我有一个单独的视图和一个控制器,并且已将 分配给 UIView 和 didAccelerate 方法来执行我的代码。我不确定在哪里设置加速度计间隔和委托,因为 UIView 不支持 viewDidLoad 方法。再次感谢您的帮助。 终于搞定了。移除 UIView 并将所有代码放在控制器中。不是最好的解决方案,但它可以工作并且稍后会重新考虑。感谢您的所有帮助:) 很高兴我能提供一些帮助,也很高兴事情终于奏效了。您使用什么控制器来实现所有代码?是导航控制器还是视图控制器? 我把所有的代码放在一个视图控制器中,并移除了单独的 UIView 对象。我对 iPhone 开发的了解仍然非常有限,但我已经到了那里,再次感谢 :) 不客气。不要担心刚刚开始。我们都在学习。有些人比其他人走得更远。【参考方案2】:

API 参考与初学者在 Cocoa/Objective-C 的实际代码中实际使用 API 之间似乎经常存在认知脱节。

此示例代码展示了视图控制器如何访问 iPhone OS 应用程序中的加速度计。

iPhone Dev Site link

提示:您是否设置了更新间隔?

【讨论】:

感谢您的帮助。我可以让加速度计在控制器类文件中工作,但不能在单独的 UIView 对象中工作。我确定我错过了一些非常明显的东西。更新间隔设置为:accelerometer.updateInterval = 1.0f/60.0f; 终于搞定了。移除 UIView 并将所有代码放在控制器中。不是最好的解决方案,但它可以工作并且稍后会重新考虑。感谢您的所有帮助:)

以上是关于如何在具有单独视图的控制器中使用加速度计?的主要内容,如果未能解决你的问题,请参考以下文章

离开视图控制器后保留任务

使用合金加速器将模型绑定到控制器视图

加速器合金传递参数

加速 iPhone 动画

在视图控制器之间切换时,图像旋转动画会加速吗

将新视图绘制到相对布局中