问题标签 [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.

0 投票
1 回答
700 浏览

ios - CADisplayLink 没有足够频繁地触发

CADisplayLink用来执行声音和动画之间的同步。同步需要非常精确,并且当前CADisplayLinkframeInterval1 运行并不能足够频繁地调用选择器。

有没有办法增加它的粒度?(frameInterval是一个整数属性,所以我显然不能低于 1)

0 投票
1 回答
1007 浏览

iphone - CADisplayLink 和 drawRect 降低了帧速率

我的问题是关于 iOS 开发的。我正在编写一个简单的游戏,以测试低级核心图形功能(上下文、图层等)以及如何将它与实际的简单视图混合......我解释一下:我在屏幕上有一个简单的精灵,它是使用属性进行动画处理UIImageView,因此帧速率可以完美运行。之后,我添加了一个无限的背景,它是用 bezier curves. 为了对此进行动画处理,我使用CADisplayLink,在背景上调用一个方法"animate",将我的点移动到 上bezier curve,然后我调用setNeedsDisplay。它“或多或少”工作得很好,但是如果我删除背景(或setNeedsDisplay调用,所以它不会在每一帧都重新生成)帧速率会增加很多,所以“任何东西”在这部分都不能正常工作......

我也尝试过双缓冲系统,但它比我当前的代码效果更差。我也想使用线程,但我真的没有发现 CPU 在后台做任何难事。

这是代码:

我更愿意存储一个UIBezierPath(这样我就可以进行一些碰撞测试),但它不允许你只删除一个点(当它离开左侧的屏幕时),所以我也必须在每一帧都初始化它。 ..我错过了什么吗?

0 投票
1 回答
235 浏览

ios - 将我的 iPhone 项目升级到通用。CADisplayLink 现在只有 30fps

当给定“1”作为其帧间隔时,有什么方法可以找出为什么 CADisplayLink 以 30fps 运行?

我在 iPad mini 上运行该应用程序。当在 iPad mini 中作为 iPhone 应用程序运行时(使用带有 2x 按钮的模式),它运行如丝般顺滑 (60fps)。但是,在 iPad mini 上作为通用应用程序运行时,即使它什么也没画,也可以产生 30fps 的最大值。

是什么原因造成的?它确实调用了 [displayLink setFrameInterval: 1],所以这不可能......对吧?

0 投票
1 回答
860 浏览

ios - 将 CADisplayLink.timestamp CFTimeInterval 转换为主机时间 (uint64)

我收到来自 CADisplayLink 的回调。该链接在 CFTimeInterval 中有一个时间戳。如何将该时间戳转换为 uint64 中的主机时间?

谢谢!

0 投票
1 回答
618 浏览

ios - iOS:如何在实际屏幕绘制之前调用 CADisplayLink 的事件?

我正在使用 UIKit 构建一个跨平台 UI 库的 iOS 实现,该库的主要功能之一是允许用户自由更改子控件的大小,并且父控件的大小会自动适应。

由于每次更改孩子的大小时都刷新父级的大小是低效且不必要的,因此我设计了 UI 系统以在实际设备绘制/渲染发生之前刷新所有“脏”控件的位置、大小和很多事情。在 iOS 上,我使用 CADisplayLink 调用刷新方法,然后我发现在所有内容都显示在屏幕上之后调用了该事件,这导致了以下问题:

  1. 用户将首先看到“崩溃”的布局。(渲染首先发生)
  2. 短时间后(CADisplayLink 的事件触发),一切都会恢复正常。

一开始我以为我使用CADisplayLink的方式是错误的,但是在任何地方都找不到解决方案,所以我现在很绝望(我要上吊了!!)

或者也许我根本不应该使用 CADisplayLink?

请帮我!


PS。由于我正在构建一个跨平台的东西,我实际上使用的是 MonoTouch,但我相信基本概念是相同的。

PS2。而且由于我使用的是C#的MonoTouch,所以上面的描述可能不适合Objective-C的世界(比如“事件”这个词,我认为与Obj-C相关的是选择器,或者什么^_^)

PS3。另外请原谅我的英语不好,如果我的描述不够清楚,请随时问我。

这里的代码:

应该很容易理解^_^

0 投票
2 回答
1851 浏览

android - CADisplayLink(iOS) 或 CompositionTarget(WP) 的 android 相关性是什么

我需要更新每帧动画,在 iOS 上我有CADisplayLink,在 WinPhone 上我有CompositionTarget,但我如何在 Android 上做到这一点?

目前我正在使用 a TimerHandler但我相信有一种方法可以将回调与刷新率同步。

0 投票
1 回答
833 浏览

objective-c - CADisplayLink 的 displayLink 每秒应该调用多少次?

我有一个CADisplayLink符合 Chipmunk Physics 的运行,我的性能非常慢。我NSLogCADisplayLink更新时调用的方法中添加了一个,平均每秒调用 22 次。我的印象是应该接近 60。我frameInterval设置为 1,那么在完美世界中应该是 60fps 吗?增量时间平均约为 0.0167 秒(而 1 / 60 IS 0.0167,这让我更加困惑)。

我的屏幕周围只有四堵墙,屏幕上只有八个圆形物体,UIButton每次调用都会更新到实例,所以我认为我没有做任何应该对我的4S和iPad3。我以单独的方法每 2.5 秒对每个按钮施加一次随机力。在模拟器中运行非常顺利,所以这是一个仅限设备的问题。任何人都可以帮我找出导致这里放缓的原因,以及我能做些什么吗?

这是相关代码,首先是设置链接的代码:

这是每秒应该调用 60 次(我认为!)但仅调用 22 次左右的方法:

最后,这是每 2.5 秒调用一次的方法,用于应用随机力 (updateForces):

(另外,这是我从某个角度获取矢量的方法,我怀疑这是导致问题的原因):

0 投票
2 回答
2143 浏览

ios - 镜像 UIWebView 的最佳方式

我需要将 UIWebView 的 CALayer 镜像到较小的 CALayer。较小的 CALayer 本质上是较大的 UIWebView 的一个点。我很难做到这一点。唯一接近的是 CAReplicatorLayer,但鉴于原件和副本必须有 CAReplicatorLayer 作为父级,我无法在不同的屏幕上拆分原件和副本。

我正在尝试做的一个说明:

在此处输入图像描述

用户需要能够与较小的 CALayer 交互,并且两者都需要同步。

我试过用 renderInContext 和 CADisplayLink 来做这件事。不幸的是,存在一些滞后/卡顿,因为它试图每秒重新绘制 60 次每一帧。我需要一种方法来进行镜像,而不需要在每一帧上重新绘制,除非实际发生了变化。所以我需要一种知道 CALayer(或子 CALayer)何时变脏的方法。

我不能简单地拥有两个 UIWebView,因为两个页面可能不同(时间关闭、背景不同等)。我无法控制正在显示的网页。我也无法显示整个 iPad 屏幕,因为屏幕上还有其他不应显示在外部屏幕上的元素。

较大的 CALayer 和较小的“pip” CALayer 都需要在 iOS 6 中逐帧平滑匹配。我不需要支持早期版本。

该解决方案必须是应用商店可通过的。

0 投票
3 回答
6096 浏览

ios - CADisplayLink 在 iOS5.1 上运行较低的帧率

CADisplayLink在我的 iPhone 应用程序中使用。

以下是相关代码:

30FPS因此每帧(1/30 秒)调用 onTick 。这在iOS6+ 上效果很好 - 正是我需要的。但是,当我在运行 iOS5.1 的 iPhone 4s 上运行我的应用程序时,onTick 方法的运行速度比 iOS6 对应的方法稍慢。几乎就像它正在运行它一样29FPS。一点点之后,就和iOS6 iPhone 5不同步了。

onTick 方法中的代码并不耗时(这是我的想法之一……),它不是 iPhone,因为该应用程序在运行 iOS6 的 iPhone 4s 上运行良好。

中的功能是否CADisplayLink不同iOS5.1?任何可能的解决方法/解决方案?

0 投票
2 回答
1078 浏览

iphone - 一次运行多个 CADisplayLinks ?

我使用 CADisplayLink 作为频闪计时器。

我有 2 个 CADisplayLinks:

主要的(在整个过程中运行):

频闪灯(仅在频闪发生时运行):

一次运行两个 CADisplayLink 是不是很糟糕?有时我的闪光灯看起来并不像我认为的那样平滑。这是我的 toggleStrobe 方法: