2011-04-18 75 views
5

我是法國人,所以請原諒我的英文。所以我使用加速度計,但在我的代碼中,加速度計用於視圖而不是圖像。我想要做的是將這個加速度計用於圖像而不是視圖。我怎樣才能做到這一點?下面是代碼: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? – 2011-04-18 17:45:22

回答

2

你並不需要有一個觀點回調,而不是你可以選擇任何類,以符合協議UIAccelerometerDelegate。只需要聲明你的類在頭文件作爲

@interface MyClass : NSObject <UIAccelerometerDelegate> { 
    // my members 
} 

在MyClass.m你必須實現方法

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

但是,如果你不被迫支持的iOS 3.x版本,你應該考慮使用CoreMotion API。有關更多信息和示例,請參見Event Handling Guide for iOS/Motion Events