Использование CATransform3D для создания флип-анимации - PullRequest
3 голосов
/ 09 апреля 2011

Я пытаюсь воссоздать 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
                                                      }
                                      ];
                                 }
                             }
             ];

Ответы [ 2 ]

1 голос
/ 10 апреля 2011

Вы не говорите, что подразумеваете под «это просто не то же самое, что UIViewAnimationTransitionFlipFromRight».Вы видите перспективу?Я обнаружил, что мне нужно указать поле .m34 перед вызовом функций CATransform3D, чтобы получить перспективу.Установите это сразу после объявления преобразования и перед вызовом CATransform3DMakeRotation.

0 голосов
/ 27 июля 2012

Я не совсем уверен, но, возможно, вам следует сбросить previewLayer.transform к CATransform3DIdentity после завершения анимации?Возможно, именно поэтому вы видите странные обратные действия во второй раз, когда запускаете его.

...