问题标签 [cadisplaylink]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 我可以用 10ms drawRect 获得 60fps 吗?
我已经问了一个关于如何CADisplayLink
和drawRect
表现在这里的更一般的问题,但由于这个问题还没有任何答案,我想我会问一个更具体的问题:有没有人设法让应用程序以 60fps 的速度运行drawRect
需要约 10 毫秒才能执行的方法?
在我的应用程序中,我配置CADisplayLink
如下:
并且该update
方法只需调用setNeedsDisplay
我的自定义 UIView (以及检查跳过的帧):
一旦drawRect
超过 4 或 5 毫秒,就会开始跳帧。就我的目的而言,它需要大约 10-11ms,但我认为给定 1/60fps = 16.7ms 这应该没问题。
有没有人做到这一点?我究竟做错了什么?
objective-c - 如何用 CADisplayLink 替换这个 NSTimer?
我意识到 CADisplayLink 会更适合我当前项目的性质,但是,我不太清楚如何实现 CADisplayLink 并替换我的 NSTimer。
下面是我的 NSTimer 的代码
如何创建一个执行相同功能但更高效的 CADisplayLink?
ios - 如何防止 UIAnimation 干扰 CADisplayLink
在我当前的项目中,有两个主要机制。一系列不断向上移动屏幕的对象,以及按下多个按钮移动 2 个对象的机制。对于在屏幕上移动的一系列对象,我使用了 CADisplayLink,而另一个机制是使用 UIAnimation,但是当我运行我的项目时,我注意到 UIAnimation 会干扰与链接的对象的移动每当按下按钮时,CADisplayLink 会持续一瞬间。我该如何纠正这个问题?
以下是我对这两种机制的代码
variables - 使用 CADisplayLink 时变量未更新
更新变量时,我无法更改它们。当我触摸按钮并且变量“self.hasYawCenterPointBeenSet”在该方法中得到更新时,方法“reCenterYaw”触发,但是当“updateCycle”方法返回时,变量没有显示它已更新。updateCycle 是我的 CADisplaylink 驱动方法。我尝试将变量更新为原子变量,并使用“_”和“self”将它们作为实例变量引用。不知道发生了什么。
ios - 如何在 for in 循环中实现 CADisplayLink
因此,我使用 for in 循环生成一堆点对象,并使用 UIView.animationWithDuration 在屏幕上为它们设置动画;但是,我想用 CADisplayLinks 替换 animationWithDurations 以便用户无法与点交互(使它们可点击)。有人可以告诉我这是如何完成的吗?提前致谢!!
ios - 如何使用 for-in-loop 在 CADisplayLink 中创建多个对象
所以我试图通过使用 for in 循环创建 10 个按钮,并使用 CADisplayLink 使所有这 10 个按钮向下移动。问题是我的 CADisplayLink 只向下移动一个按钮,我希望它移动所有 10 个按钮。请帮忙!提前致谢!
}
ios - 将 CADisplayLink 更改同步到正在进行的 CAAnimation
我正在尝试将 CADisplayLink 和 CAAnimation 结合起来,以便我可以使用 CAAnimation 为某些图层设置动画,并根据动画图层的变化表示层实时调整其他图层。我意识到当 CADisplayLink 回调在我的进程中时,CAAnimations 是在我的进程之外驱动的,因此同步永远不会完全紧密。但是,我希望它会比我所看到的更好(我看到的延迟可能高达 4 帧)。
归结为一些简单的示例代码,我创建了一堆层对。其中一半是轮廓,另一半是实心方块 - 所有项目都具有相同的大小。目标是为这些矩形对设置动画,以使它们的轮廓和正方形始终在一起(即同一帧)。
每个循环,我为实体层设置一个新位置,并让 CADisplayLink 回调根据其互补实体层的表示层位置设置轮廓层。在模拟器上,这似乎大部分时间都有效,至少对于少数层。一旦我得到多达 24 对图层,一些轮廓开始滞后。在设备(iPad Air 和 iPhone 6)上,即使只有一个正方形,轮廓也会滞后。我正在使用 iOs 8 进行所有测试。
下面是我的 ViewController 实现。
我尝试了 3 种不同的计时功能,我看到了相同的结果。我还检查了带有仪器的帧速率,我得到了 58-60 fps 并且仍然看到可见的分离。
我想知道是否有人知道更好的方法来做到这一点。我知道我可以将所有动画转换为由 CAAnimation 或 CADisplayLink 驱动。但是,就我而言,两者都没有吸引力。我在屏幕上有数百个图层,所有图层都是相互连接的(构成一个始终响应且完全动画的视图) - 有时是分层的。Core Animation 让生活变得更易于管理(我相信更有效率,尽管这可能是我滞后的根本原因是“效率”)——所以我不想把它扔掉。我对必须参数化我的所有动画并不感到兴奋。有许多层依赖于许多其他层的帧。能够为大部分工作运行动画,然后只是“手动”做一些极端情况
此外,我意识到 UIKit Dynamics 的构建是为了为动画和响应式视图提供良好的基础。但是,我正在调整图层的大小,并且屏幕上图层的位置需要约束和附件。将其扩展到数百甚至数千层似乎是有问题的,尤其是在 CPU 已经受到限制的情况下。
ios - 如何使用 for-in-loop 生成按钮数组,然后使用 CADisplayLink 对其进行动画处理
我尝试使用 for-in-loop 生成一组 10 个按钮,然后使用 CADisplayLink 内部的 for-in-loop 为它们设置动画,但问题是只有一个按钮正在创建和动画。请帮忙!提前致谢!
}
ios - 如何在 CADisplayLink 中设置延迟
我正在使用 aCADisplayLink
为 10 个不同的按钮设置动画,但这些按钮都聚集在一起。所以我的问题是如何实现延迟以使每个按钮在不同的时间进行动画处理,这样它们就不会全部聚集在一起。
ios - 如何应用复杂的 CALayer 变换更改?
我需要一个复杂的连续动画,UIView
其中涉及设置CATransform3D
需要计算的旋转和平移属性,因此没有标准动画。
我转向使用CALayer
动画。并有这个:
这self.imageLayer
是一个已经设置了图像并作为子图层添加到我的基本视图的CALayer
对象。contents
它确实会旋转“一点”,但不是连续旋转,有时它似乎会停止或向后旋转一点。
似乎transform
经常分配一个新的并没有任何效果,因为该self.rotation
值增加了很多。添加一个[self setNeedsDisplay]
没有帮助。
我还没有对CALayer
s 做太多事情,所以我想我错过了一些非常基本的东西。试图找到它一段时间,但我发现的所有例子似乎都离我想要的太远了。