Я разрабатываю приложение, которое при открытии пользователя будет иметь изображение, управляемое CMMotionManager, которое перемещается в соответствии с тем, как пользователь наклоняет устройство.CMMotionManager Reference Frame
.. ..
Это мой код, чтобы начать движение устройства.
motionManager = [[CMMotionManager alloc] init];
motionManager.showsDeviceMovementDisplay = YES;
motionManager.deviceMotionUpdateInterval = 1.0/60.0;
[motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical];
Это код, который я использую для управления своим изображением в связи с движением устройства.
- (void)drawRect:(CGRect)rect
{
if (placesOfInterestCoordinates == nil) {
return;
}
mat4f_t projectionCameraTransform;
multiplyMatrixAndMatrix(projectionCameraTransform, projectionTransform, cameraTransform);
int i = 0;
for (MovingImage *poi in [placesOfInterest objectEnumerator]) {
vec4f_t v;
multiplyMatrixAndVector(v, projectionCameraTransform, placesOfInterestCoordinates[i]);
float x = (v[0]/v[3] + 1.0f) * 0.5f;
float y = (v[1]/v[3] + 1.0f) * 0.5f;
if (v[2] < 0.0f) {
CGPoint movingTo = CGPointMake(x*self.bounds.size.width, self.bounds.size.height-y*self.bounds.size.height);
if (movingTo.x < -118) {
movingTo.x = -118;
}
if (movingTo.x > 542) {
movingTo.x = 542;
}
if (movingTo.y < 215) {
movingTo.y = 215;
}
if (movingTo.y > 390) {
movingTo.y = 390;
}
poi.view.center = movingTo;
poi.view.hidden = NO;
} else {
poi.view.hidden = YES;
}
i++;
}
}
Изображение находится в центре экрана редко, когда пользователь открывает приложение, изображение, как правило, вправо или влево на 90 градусов от исходного положения, или ровно посередине последовательно.
Я предполагаю, что CMAttitudeReferenceFrameXArbitraryCorrectedZVertical
проблема, но я также пробовал CMAttitudeReferenceFrameXArbitraryZVertical
, который тоже не работает. Если это полезно, мой проект here, для всех, кто интересуется. Я также использовал образец кода Apple pARk.