我正在尝试重新创建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
}
];
}
}
];
答案 0 :(得分:1)
你没有说“你和UIViewAnimationTransitionFlipFromRight不一样”是什么意思。你看到了视角吗?我发现在调用CATransform3D函数之前我需要先指定.m34字段才能获得透视图。在声明转换之后和调用CATransform3DMakeRotation之前立即设置。
答案 1 :(得分:0)
我不完全确定,但也许您应该在完成动画时将previewLayer.transform重置为CATransform3DIdentity?这可能就是为什么你第二次运行它时会看到奇怪的反向动作。