我自己学习了目标c,没有参加任何课程。因此,有时我在编写 iOS 应用程序时会对一些小事感到困惑。这个问题可能很蹩脚,但我找不到任何解决方案,或者我无法理解解决方案。这是我的情况:
我的应用程序包含单个视图控制器(默认)。我想从加速度计、陀螺仪和磁力计获得连续值,并使用这些值使用行人航位推算 (PDR) 来估计用户位置。为此,我使用了 CoreMotion 并motionManager
在头文件中创建了一个 CLMotionManager ( ) 属性。使用这个管理器,我可以检查传感器是否可用并获取它们的值,例如:
if([_motionManager isAccelerometerAvailable])
{
_motionManager.accelerometerUpdateInterval = 0.1;
[_motionManager startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc]init] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
x=accelerometerData.acceleration.x;
y = accelerometerData.acceleration.y;
z = accelerometerData.acceleration.z;
}];}
同样,我可以从陀螺仪和磁力计中获取值。IBAction
按下按钮后,我在方法中获取这些值:
-(IBAction)startSensor:(id)sender
{
//Getting accelerometer, gyroscope, and magnetometer values.
}
PDR 操作发生在我的下一个方法中:
-(void)thePDROperationWith:(NSArray*)accelerometerValues gyroscopeValues:(NSArray*)gyros magnetometerValues:(NSArray*)magneto
{
//The PDR operations with accelerometer, gyroscope and magnetometer values
}
现在,我的问题是:
1)如何从thePDROperationWith::
方法中获得连续的PDR操作值?我在方法内部调用了这个startSensor
方法,但是当我按下按钮时我只得到一次值。此外,我是否也应该在头文件中声明此方法(如在用户定义的NSObject
子类中)?
2)用户定义的方法和委托方法有什么区别,比如
//a method in CLBeaconManager delegate
-(void)beaconManager:(CLBeaconManager*)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
{
//code
}
?
这个委托方法(我希望我使用的是正确的术语)连续运行以在定义的CLBeaconRegion
. 我怎样才能为我的目的制作这种方法?
谢谢你。