当前位置:  开发笔记 > 编程语言 > 正文

基于UIView的动画

如何解决《基于UIView的动画》经验,为你挑选了1个好方法。

我正在尝试为2D游戏制作一些UIImageViews的动画.使用[UiView开始/提交动画]是不可能的,因为我需要始终确定所有图像视图的位置.相反,我正在改变我的UIImageViews中的frame.origin.x/y来手动控制我的动画.我的问题是,对于大量的UIImageViews,帧率会显着下降,或者如果它们的大小太大(顺便说一句,UIImageViews包含具有透明色的PNG).你有任何优化建议吗?

谢谢



1> Brad Larson..:

UIImageView适用于动画显示(UIViews是围绕CALayers的轻量级包装器,它们只是存储在图形卡上的纹理),但你需要使用开始/提交动画块来获得平滑的动画.使用它,您可以通过访问UIView的后备层并获取其表示层来检索视图的当前位置.Dustin Bachrach有一篇文章描述了如何做到这一点.基本上,表示层是核心动画最接近实际图层在任何给定时间的位置,因此它的帧是当时UIView的帧.

我不确定触摸事件是否会在视图中移动到屏幕上时找到它们的路径,因此如果您需要让UIImageView响应触摸,您可能需要将其替换为CALayer,将其作为您的子层插入主UIView的图层,并在该主图层的presentationLayer上调用hitTest方法.如果单击它,则应该返回移动图层的presentationLayer,否则返回背景图层.

老实说,除非出于性能原因,否则我不会选择OpenGL,因为代码比Core Animation为您提供的UIViews和CALayers要难得多.我已经能够使用UIViews和CALayers以60 FPS(100 FPS 30)动画50个移动半透明层.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有