gpt4 book ai didi

ios - GLKViewController方向动画

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:23:55 24 4
gpt4 key购买 nike

我有一个布局,其中屏幕分为两部分:顶部的 UIView 和底部的 GLKViewController。问题是当屏幕方向改变时GLKViewController 部分旋转并逐渐拉伸(stretch),直到动画结束,此时将绘制一个新的未拉伸(stretch)帧。

有没有一种方法可以禁用 GLKViewController 的自动旋转动画,这样我就可以通过操纵模型 View 投影矩阵手动为其设置动画?

最佳答案

如果您只是想处理拉伸(stretch)效果,则无需更换整个方向/旋转系统。根据您在应用程序 UI 中使用设备方向的程度,重新实现方向和旋转可能会给自己带来更多维护难题。 (如果您需要做的不仅仅是解决拉伸(stretch)效果,其他答案仍然不错。)

您的 View 在旋转动画期间绘制自身,因此您需要做的就是确保它在动画期间以与其中间尺寸相匹配的方式绘制自身。旋转动画由 Core Animation 处理,因此您可以使用其 presentationLayer 方法来访问动画期间的临时状态。例如:

CALayer *presentationLayer = [self.view.layer presentationLayer];
CGSize layerSize = presentationLayer.bounds.size;
float aspect = fabsf(layerSize.width / layerSize.height);
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(
GLKMathDegreesToRadians(65.0f), aspect, 0.1f, 100.0f);

将此代码段作为更新/绘制循环的一部分运行 - 请注意,这可能意味着将投影矩阵的计算移至更新/绘制循环(如果尚不存在)。 (您可能还想确保此代码段仅在方向更改正在进行时运行每一帧。)

要查看正在进行的动画并确保其正常工作,请在 iOS 模拟器中使用“切换慢速动画”命令。

(致谢:代码来自 this answer。)

关于ios - GLKViewController方向动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23093272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com