ios - Core Animation drawLayer :inContext driven by NSTimer, 我做对了吗?

标签 ios core-animation quartz-graphics avfoundation

我正在做一个涉及 Core Animation 和 AV Foundation 的项目。我想使用 Core Animation 渲染一些效果,然后通过 AV Foundation 将其导出到视频文件。我想要实现的动画效果是在 iPad 上重放最终用户签名他/她的签名。

到目前为止我所取得的成就:
- 引用 Apple 的 GLPainter 示例,我能够记录用户签名的笔画,每个单独的笔画由多个触摸点 (CGPoint) 组成,这些触摸点已记录在我的自定义 UIView 的 touchBegin/touchMoved/touchEnd 方法中。
- 由可重复的 NSTimer 驱动,我可以在我的自定义 UIView 上重新绘制它。主要是从一个点到下一个点画线的重复过程。

我正在尝试做的事情:
用 Core Animation 技术实现签名重绘,然后用 Av Foundation 组合代码嵌入核心动画代码来渲染最终输出。

我现在关心的是:

  • 对Core Animation一无所知,最近几天一直在学习。但是,我读过的教程/书籍只告诉我如何通过更改 CALayer 的属性来制作隐式动画,或制作 CAKeyframeAnimation。但是我的动画有点像是在图层的 Canvas 上逐步绘制一些东西,而不是移动一些东西。那么,如何在 Core Animation 中做到这一点呢?

  • 我现在在做什么:与我对 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/

    相关文章:

    ios - 如何在 swift 中将字节转换为浮点值?

    ios - 启用抗锯齿后,使用不同颜色在 drawRect 中绘制重叠形状会导致边缘出血

    ios - 在iOS上使用Quartz2d时的字体平滑/抗锯齿?

    iphone - 如何调整 Quartz 2D 上下文以适应 Retina 显示屏?

    iphone - 如何在iOS中实现剧烈的Shake?

    ios - NSURLRequest:如何处理重定向的帖子?

    ios - 如何从 iPhone 中选择文件?

    ios - UILabel 显示动画(无需移动或调整文本大小)

    ios - 无法让 CALayer 更新其 drawLayer : DURING a bounds animation

    objective-c - iOS CATransform3D 坐标