• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - GLKViewController 方向动画

[复制链接]
菜鸟教程小白 发表于 2022-12-12 21:37:17 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

有没有办法禁用 GLKViewController 的自动旋转动画,所以我可以通过操纵模型 View 投影矩阵来手动为其设置动画?



Best Answer-推荐答案


如果您只是想处理拉伸(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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap