我正在做一个涉及 Core Animation 和 AV Foundation 的项目。我想使用 Core Animation 渲染一些效果,然后通过 AV Foundation 将其导出到视频文件。我想要实现的动画效果是在 iPad 上重放最终用户签名他/她的签名。
到目前为止我所取得的成就:
- 引用 Apple 的 GLPainter 示例,我能够记录用户签名的笔画,每个单独的笔画由多个触摸点 (CGPoint) 组成,这些触摸点已记录在我的自定义 UIView 的 touchBegin/touchMoved/touchEnd 方法中。
- 由可重复的 NSTimer 驱动,我可以在我的自定义 UIView 上重新绘制它。主要是从一个点到下一个点画线的重复过程。
我正在尝试做的事情:
用 Core Animation 技术实现签名重绘,然后用 Av Foundation 组合代码嵌入核心动画代码来渲染最终输出。
我现在关心的是:
我现在在做什么:与我对 Quartz2D 所做的非常相似,我使用 NSTimer 重复设置我的 CALayer 对象需要显示,这反过来又调用其委托(delegate)的 drawLayer:inContext 方法的实现,我在其中编写的代码与我在 UIView 的 drawRect 中编写的代码完全相同。
好吧,我做了一种动画,没有涉及任何 CAAnimation。我只是觉得很奇怪,感觉我做错了。我还没有着手将核心动画与 AV 基础部分结合起来,但我怀疑我的见鬼不会通过。
我做了诚实的搜索,所以我发誓,但没有发现任何相关的东西。我不得不说我在 Quartz2D 和 Core Animation 方面的经验非常有限,所以,如果有人能给我一些提示,我真的很感激,谢谢!
最佳答案
您要做的是将您的绘图同步到屏幕的刷新率。一个 NSTimer
不是特别擅长这个。您正在寻找的类(class)是CADisplayLink
.像这样访问它:
link = [[UIScreen mainScreen]
displayLinkWithTarget:self
selector:@selector(shouldUpdateDisplayLink:)];
设置需求显示在
shouldUpdateDisplayLink:
打回来。保留显示链接以确保它保持不变,并可选择设置较低的刷新率,以匹配媒体播放。
关于ios - Core Animation drawLayer :inContext driven by NSTimer, 我做对了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7117654/