Xcode iPhone акселерометр изображение - PullRequest
5 голосов
/ 18 апреля 2011

Я француз, так что извините за мой английский. Поэтому я использую акселерометр, но в моем коде акселерометр работает для просмотра, а не для изображения. То, что я хочу сделать, это использовать этот акселерометр для изображения вместо представления. Как я могу это сделать? Вот код:

#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

1 Ответ

2 голосов
/ 18 апреля 2011

Вам не нужно иметь представление в качестве обратного вызова, вместо этого вы можете выбрать любой класс, соответствующий протоколу 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. См. Руководство по обработке событий для iOS / События Motion для получения дополнительной информации и примеров.

...