Я пытаюсь воссоздать UIViewAnimationTransitionFlipFromRight (и слева).Моя причина для этого, как показано ниже, состоит в том, чтобы внести изменения в AVCaptureVideoPreviewLayer в середине анимации, когда слой заблокирован.UIViewAnimationTransitionFlipFromRight не позволит мне остановить анимацию на полпути, внести изменения в сессию и продолжить, так что вот мой лучший шанс на это.
Хотя это работает, это не то же самое, что UIViewAnimationTransitionFlipFromRight.Слой начинает вращаться, но больше по слайду, назад и по диагонали (очень сложно описать), а затем переворачивается для второй части анимации.Я ищу правую сторону слоя, чтобы перевернуть назад, а затем продолжить влево.Вместо этого правая сторона начинается справа, вращается назад, а затем снова поворачивается вправо.
Что я делаю не так?
ОБНОВЛЕНИЕ: В первый раз он вращается правильно.После этого проблема, упомянутая выше, сохраняется.Что-то делать с AVCaptureVideoPreviewLayer, который должен быть сброшен?Не уверен, просто предположение.
[UIView animateWithDuration:1.5 delay:0.0
options:UIViewAnimationCurveEaseIn
animations:^{
CATransform3D frontTransform = CATransform3DIdentity;
frontTransform.m34 = 1.0 / -850.0;
frontTransform = CATransform3DMakeRotation(M_PI_2,0.0,1.0,0.0); //flip halfway
frontTransform = CATransform3DScale(frontTransform, 0.835, 0.835, 0.835);
previewLayer.transform = frontTransform;
}
completion:^(BOOL finished){
if (finished) {
[previewLayer setAutomaticallyAdjustsMirroring:NO];
[previewLayer setMirrored:NO];
[session beginConfiguration];
[[self captureManager] setMirroringMode:AVCamMirroringOff];
[session commitConfiguration];
[UIView animateWithDuration:1.5
delay:0.0
options:UIViewAnimationCurveEaseOut
animations:^{
CATransform3D backTransform = CATransform3DIdentity;
backTransform.m34 = 0.0f;
backTransform = CATransform3DMakeRotation(M_PI,0.0,1.0,0.0); //finish the flip
backTransform = CATransform3DScale(backTransform, 1.0, 1.0, 1.0);
previewLayer.transform = backTransform;
}
completion:^(BOOL finished){
//nothing upon completion
}
];
}
}
];