問題タブ [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サウンドとアニメーションの同期を実行するために使用しています。同期は非常に正確である必要があり、現在 1 で実行CADisplayLinkされているframeIntervalため、セレクターを十分に呼び出すことができません。

粒度を上げる方法はありますか?(frameIntervalは整数プロパティなので、明らかに 1 を下回ることはできません)

0 投票する
1 に答える
1007 参照

iphone - CADisplayLinkとdrawRectでフレームレートが低下しました

私の質問はiOS開発についてです。低レベルのコアグラフィックス機能(コンテキスト、レイヤーなど)をテストし、それを実際の単純なビューと混合する方法をテストするために、単純なゲームを書いています...説明します:画面に単純なスプライトがあります。プロパティでアニメーション化されるUIImageViewため、フレームレートは完全に機能します。その後、でオンザフライで生成される無限の背景を追加しました bezier curves。これをアニメーション化するために、バックグラウンドでCADisplayLinkメソッド"animate"を呼び出してポイントを移動するを使用してbezier curveから、を呼び出しますsetNeedsDisplay。「多かれ少なかれ」うまく機能しますが、背景を削除すると(またはsetNeedsDisplay呼び出し元なので、フレームごとに再生成されないため)、フレームレートが大幅に増加するため、この部分では「何か」が正しく機能しません。

ダブルバッファリングシステムも試しましたが、現在のコードよりもうまく機能しません。私もスレッドを使用することについては考えていますが、CPUがバックグラウンドで実行するのは難しいことではありません。

コードは次のとおりです。

を保存したいのですがUIBezierPath(衝突テストを行うことができます)、1つのポイントを削除することはできません(左側の画面を離れるとき)。そのため、フレームごとに初期化する必要があります。 ..何か足りないのですか?

0 投票する
1 に答える
235 参照

ios - iPhone プロジェクトをユニバーサルにアップグレードしました。CADisplayLink は 30fps のみになりました

フレーム間隔として「1」が指定されたときに、CADisplayLink が 30fps で実行されている理由を調べる方法はありますか?

iPad miniでアプリを実行していました。iPad mini 内で iPhone アプリとして実行した場合 (2x ボタンでそのモードを使用)、スムーズに (60fps) 実行されました。ただし、iPad mini でユニバーサル アプリとして実行すると、何も描画していない場合でも最大 30 fps が得られます。

何が原因でしょうか? [displayLink setFrameInterval: 1] を呼び出したので、それはあり得ません..そうですか?

0 投票する
1 に答える
860 参照

ios - CADisplayLink.timestamp CFTimeIntervalをホスト時間に変換します(uint64)

CADisplayLinkからコールバックを受け取っています。リンクのタイムスタンプはCFTimeIntervalです。そのタイムスタンプをuint64でホストタイムに変換するにはどうすればよいですか?

ありがとう!

0 投票する
1 に答える
618 参照

ios - iOS: 実際の画面描画の前に呼び出される CADisplayLink のイベントを作成する方法は?

UIKit を使用してクロスプラットフォーム UI ライブラリの iOS 実装を構築しています。ライブラリの主な機能の 1 つは、ユーザーが子コントロールのサイズを自由に変更できるようにすることであり、親コントロールのサイズは自動的に適応します。

子のサイズが変更されるたびに親のサイズを更新するのは非効率的で不必要であるため、実際のデバイスの描画/レンダリングが発生する前に、すべての「ダーティ」コントロールの位置、サイズ、および多くのことを更新するように 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)に関連するアンドロイドは何ですか

フレームごとにアニメーションを更新する必要がありますCADisplayLink。iOS では 、WinPhone では ですがCompositionTarget、Android ではどうすればよいですか?

現在、 をTimerと一緒に使用しHandlerていますが、コールバックをリフレッシュ レートと同期させる方法があると思います。

0 投票する
1 に答える
833 参照

objective-c - CADisplayLink の displayLink を 1 秒間に何回呼び出す必要がありますか?

Chipmunk Physics に沿ってCADisplayLink実行していますが、パフォーマンスが非常に低下しています。NSLog更新時に呼び出されるメソッドに を入れたCADisplayLinkところ、1 秒あたり平均 22 回呼び出されています。私はそれが 60 に近いはずだという印象を受けました。私はframeIntervalセットを 1 にしているので、完璧な世界では 60 fps である必要がありますか? デルタ時間は平均で約 0.0167 秒です (そして 1/60 IS 0.0167 で、さらに混乱しています)。

画面の境界の周りに 4 つの壁があり、画面上に 8 つの円形のボディがあり、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 でこれをやってみました。残念ながら、1 秒間に 60 回、すべてのフレームを再描画しようとしているため、ラグやスタッターが発生します。何かが実際に変更されていない限り、各フレームで再描画せずにミラーリングを行う方法が必要です。そのため、CALayer (または子 CALayer) がいつダーティになるかを知る方法が必要です。

2 つのページが異なる可能性があるため (タイミングがずれている、背景が異なるなど)、単純に 2 つの UIWebView を持つことはできません。表示されている Web ページを制御できません。外部画面に表示されるべきではない他の要素が画面にあるため、iPad 画面全体を表示することもできません。

iOS 6 では、大きい方の CALayer と小さい方の "pip" CALayer の両方が、フレームごとにスムーズに一致する必要があります。以前のバージョンをサポートする必要はありません。

ソリューションは、アプリストアでまずまずのものである必要があります。

0 投票する
3 に答える
6096 参照

ios - iOS5.1で低いフレームレートを実行しているCADisplayLink

CADisplayLinkiPhoneアプリで使用しています。

関連するコードは次のとおりです。

したがって、onTickは30FPS(1/30秒)のフレームごとに呼び出されます。これはiOS6+でうまく機能します-私が必要としていることを正確に実行します。ただし、iOS5.1を実行しているiPhone 4sでアプリを実行した場合、onTickメソッドの実行速度はiOS6のメソッドよりもわずかに遅くなりました。まるでそれを実行していたように29FPS。少し経つと、iOS6iPhone5と同期しなくなりました。

onTickメソッドのコードは時間のかかるものではなく(それは私の考えの1つでした...)、iOS6を実行しているiPhone 4sでアプリが正常に動作するため、iPhoneではありません。

CADisplayLinkで機能が異なりiOS5.1ますか?考えられる回避策/解決策はありますか?

0 投票する
2 に答える
1078 参照

iphone - 一度に複数のCADisplayLinkを実行しますか?

ストロボのタイマーとしてCADisplayLinkを使用しています。

私は2つのCADisplayLinksを持っています:

主なもの(これはすべての間に実行されます):

ストロボ1つ(これはストロボが発生したときにのみ実行されます):

2つのCADisplayLinkを同時に実行するのは悪いことですか?ストロボが思ったほどスムーズに見えないことがあります。これが私のtoggleStrobeメソッドです。