0

如果对此进行研究,我已经做了很多工作,但我还没有找到答案。

基本上,我正在用 Objective-C 为 iPhone 制作一个掷骰子应用程序。我希望能够使用“倾斜”功能来掷骰子。例如,如果用户将他的设备与地面保持水平,则骰子将结算。但是,如果用户随后将他的设备向右倾斜,所有骰子都会向右“滚动”,直到达到极限。

怎样才能以那种方式利用此功能?而且,如果可能的话,我想将角度存储在整数、浮点数、双精度或 NSString 中,这样我就可以有效地使用它,并轻松地测试应用程序。

4

2 回答 2

3

不幸的是,我无法评论或否决链接到 2007 年(甚至在官方 SDK 发布之前)不包含相关 API 信息的帖子的答案。

最好使用官方的最新指南:http: //developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MotionEvents/MotionEvents.html

以上将向您展示如何获取一些原始数据;它不会进行实现“滚动”模拟所需的所有计算。

于 2011-03-01T02:55:19.970 回答
3

你可以通过加速度计来做到这一点。当您倾斜设备时,加速度计将为您提供 xyz 轴值。为此添加一个属性,它是 UIAccelerometer 类的类型。

    UIAccelerometer*  theAccelerometer;

现在您定义频率和委托。您应该从要开始接收的位置编写此代码。

    theAccelerometer = [UIAccelerometer sharedAccelerometer];
    theAccelerometer.updateInterval = 1 / 50;
    theAccelerometer.delegate = self;

现在您必须添加委托方法

    -(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
        myX = acceleration.x;
        myY = acceleration.y;
        myZ = acceleration.z;
    }

好的,现在您的值以 50 [意味着 20 毫秒] 的频率频繁更新。现在,如果您想停止接收这些值,显然您应该在离开此视图后停止接收,如下所示:

    theAccelerometer.delegate = nil

您可以再次开始接收加速度计数据,将委托分配给自己

    theAccelerometer.delegate = self;

如果您有任何进一步的问题,您可以在 Skype 上联系我 behestee

于 2011-10-24T12:14:14.810 回答