2011-04-18 5 views
5

나는 프랑스어로 영어로 실례합니다. 그래서 저는 가속도계를 사용합니다. 그러나 코드에서 가속도계는 이미지가 아닌보기를 위해 작동합니다. 내가하고 싶은 것은이 가속도계를 뷰 대신 이미지로 사용하는 것입니다. 어떻게해야합니까? 당신은 프로토콜 UIAccelerometerDelegate을 준수하는 대신에 당신이 어떤 클래스를 선택할 수 있습니다 콜백으로보기를 할 필요가 없습니다Xcode iPhone 가속도계 이미지

#define CONST_fps 100. 
#define CONST_map_shift 0.01 
#define kFilteringFactor 0.1 
UIAccelerationValue rollingX, rollingY, rollingZ; 

@implementation MapViewRotationViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // accelerometer settings 
    [[UIAccelerometer sharedAccelerometer] setDelegate:self]; 
    [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0/CONST_fps)]; 
} 

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration 
{ 
    rollingX = (acceleration.x * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor)); 

    rollingY = (acceleration.y * kFilteringFactor) + (rollingY * (1.0 - kFilteringFactor)); 

    rollingZ = (acceleration.z * kFilteringFactor) + (rollingZ * (1.0 - kFilteringFactor)); 

    float accelX = acceleration.x - rollingX; 
    float accelY = acceleration.y - rollingY; 
    float accelZ = acceleration.z - rollingZ; 

    static CGFloat ZZ = 0.; 
    CGFloat z = (atan2(rollingX, rollingY) + M_PI); 

    if (fabsf(ZZ - z) > CONST_map_shift) 
    { 
     viewToRotate.layer.transform = CATransform3DMakeRotation(ZZ=z, 0., 0., 1.); 
    } 
} 

@end 
+0

나는 당신이 여기서 묻고있는 것을 이해하지 못합니다. 위 코드를 사용하여보기를 회전 할 수 있다면 왜 UIImageView가 아닌가? –

답변

2

: 여기에 코드입니다. 그냥 당신이 방법을

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { 
    // do what you like 
} 

을 구현해야

MyClass.m에서
@interface MyClass : NSObject <UIAccelerometerDelegate> { 
    // my members 
} 

로 헤더 파일에 클래스를 선언하지만 아이폰 OS 버전 3.x를 지원하도록 강요하지 않는 경우, 당신은 사용을 고려해야합니다 CoreMotion API. 자세한 내용과 샘플은 Event Handling Guide for iOS/Motion Events을 참조하십시오.