저는 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];
모든 것이 잘 동작 하는가 ??? 참조를 잘못 구현 했습니까?
나는 귀하의 조언을 받아 if (referenceAttitude == nil) {referenceAttitude = [attitude retain]; } viewDidLoad에서 제거했지만 아무런 차이가 없었습니다 ???? 그것의 이상한, 나는이 코드가 작동해야한다고 확신합니다. 시도해 주셔서 감사합니다 :) – EcksMedia
referenceAttitude가 사용되는 다른 곳이 있습니까? 제 1, 제 2 또는 제 n 호출 인 경우, updateData에서 중단 점을 ivnestigate로 설정하십시오. 어쩌면 CMAttitude 자체가 멀티플되고 싶지 않을까요? if (referenceAttitude == nil)의 else 블록에 multiplyBIOA를 두어보십시오. – Kay