2011-06-12 3 views
0

저는 Core Motion으로 처음으로 놀고 있는데 문제가 발생했으며 진행 상황을 해결할 수 없습니다. 나는 그것이 간단한 문제가 될 것이라고 확신한다.CMDeviceMotion은 multiplyByInverseOfAttitude와 함께 발행됩니다.

.H 파일

#import <UIKit/UIKit.h> 
#import <CoreMotion/CoreMotion.h> 

@interface TempVC : UIViewController { 
CMMotionManager *motionManager; 
CMAttitude *referenceAttitude; 
CMAttitude *attitude; 
} 
- (void)updateData; 
@end 

하는 .m 파일이 코드는 무엇이 잘못되었는지의 진짜 표시와 충돌합니다

#import "TempVC.h" 
#define DEGREES(radians) (radians/M_PI * 180.0) 
@implementation TempVC 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
self.view.backgroundColor = [UIColor brownColor]; 

motionManager = [[CMMotionManager alloc] init]; 
referenceAttitude = nil; 

CMDeviceMotion *dm = motionManager.deviceMotion; 
attitude = dm.attitude; 
referenceAttitude = [attitude retain]; 

motionManager.deviceMotionUpdateInterval = 0.1; 
[motionManager startDeviceMotionUpdates]; 

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateData) userInfo:nil repeats:YES]; 

} 

- (void)updateData 
{ 
attitude = motionManager.deviceMotion.attitude; 
[attitude multiplyByInverseOfAttitude:referenceAttitude]; 
NSLog(@"\n Roll: %.0f\n Pitch: %.0f\n Yaw: %.0f",DEGREES(attitude.roll), DEGREES(attitude.pitch), DEGREES(attitude.yaw)); 
} 

: 여기에 몇 가지 코드입니다. 내가 의견을 말하면

[attitude multiplyByInverseOfAttitude:referenceAttitude]; 

모든 것이 잘 동작 하는가 ??? 참조를 잘못 구현 했습니까?

답변

2

업데이트를 시작하기 전에 CMMotionManager의 deviceMotion 속성에 액세스합니다. 거기에 그 당시에는 여전히 존재하지 않을 referenceAttitude를 저장합니다. updateData가 몇 밀리 후에 호출되면 [attitude multiplyByInverseOfAttitude:referenceAttitude];이 실패합니다.

대신 updateData의 첫 번째 호출에서 referenceAttitude를 설정하면 올바르게 작동합니다.

+0

나는 귀하의 조언을 받아 if (referenceAttitude == nil) {referenceAttitude = [attitude retain]; } viewDidLoad에서 제거했지만 아무런 차이가 없었습니다 ???? 그것의 이상한, 나는이 코드가 작동해야한다고 확신합니다. 시도해 주셔서 감사합니다 :) – EcksMedia

+0

referenceAttitude가 사용되는 다른 곳이 있습니까? 제 1, 제 2 또는 제 n 호출 인 경우, updateData에서 중단 점을 ivnestigate로 설정하십시오. 어쩌면 CMAttitude 자체가 멀티플되고 싶지 않을까요? if (referenceAttitude == nil)의 else 블록에 multiplyBIOA를 두어보십시오. – Kay

관련 문제