1

如果 Accelerometer 的事件处理程序接受UIAcceleration *以下内容:

-(void) accelerometer:(UIAccelerometer *)accelerometer 
            didAccelerate:(UIAcceleration *)acceleration {

那么如果ViewController有一个实例变量:

UIAcceleration accelerationCurrent;

然后为了记住加速度作为当前状态,我用

accelerationCurrent = *acceleration;

在加速度计事件处理程序中。但是.h文件中的实例变量声明给出了“接口类型不能静态分配”的错误。

我以为UIAcceleration只有 3 个双打:x,y,z,所以如果我们可以CGPoint aPoint在那里使用,为什么我们不能使用UIAcceleration accelerationCurrent,我们如何在不单独复制 x、y、z 而是使用一个UIAcceleration对象的情况下保持加速度?(如果我们声明一个指针,并复制指针(引用),那么在离开加速度计事件处理程序时,指针可能指向非法内存空间)。

4

1 回答 1

3

即使UIAcceleration只有四个数据成员(x、y、z 和时间戳),它也不是 a struct,因此它不允许您静态引用它(即您需要使用指针)。这与CGPointC不同struct,因此您可以通过指针或不使用指针来使用它。

不幸的是,没有办法复制您感兴趣的值:您绝对正确,一旦线程离开您的处理程序,UIAcceleration对象可能会在您背后重用。UIAcceleration也不符合复制协议,因此您需要自己编写该复制例程。

于 2012-04-27T02:36:42.950 回答