問題タブ [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 - iOS アプリケーションで目的のレンダリング頻度 (FPS) を設定する方法は?
メソッド/ハンドラーを使用CADisplayLink
してiOSアプリで使用しています。renderOneFrame
私の理解では、これは画面がリフレッシュされるたびに、つまり 60Hz でトリガーされるということです。
しかし、私のアプリは 60FPS での実行に苦労しており、さらに機能を追加する必要があるため、古いハードウェアでは実現できないのではないかと心配しています。可変レートで実行するのではなく、30 FPS でレンダリングして、余裕を持たせたいと思います。
これを簡単に実現する方法はありますか?
これがコアのようですが、私は iOS に移植する C++ コーダーなので、少し混乱しています (見つけたサンプルからコピーしました)。
ios - iOS - CALayer のコンテンツの変更を検出する
私は を持ってCALayer
いCAKeyFrameAnimation
ます。
の内容の変更を検出する方法はありCALayer
ますか?
CALayer
の内容(画像)がで変わるたびにCAKeyFrameAnimation
で短い音を鳴らしたいという感じAVAudioPlayer
です。
アップデート
こんな感じで解決しました。
CADisplayLink
もちろん、不要になったら無効にすることを忘れないでください。
iphone - CADisplayLink と UIView のアニメーションが信頼できない
再帰的なアニメーションを処理する Animations Manager クラスを作成しようとしています。それは機能していますが、信頼性が低いです。たとえば、時々、それを使用すると、アニメーションは「連続して」発生し、その間に遅延はありません。それを使用すると、アニメーション間に遅延が残ります(これは、他のView Controllerにある他の要素で発生しています)
これが私のコードです:
ios - コレクション ビューの各セルに複数の CADisplayLink オブジェクトを使用するか、単一の displayLink と forward コールバックを使用するか
より効率的なものは何CADisplayLink
ですか? 複数のインスタンスをセルごとに 1 つ持つか、単一のインスタンスを持ち、各セルに呼び出しを転送しますか?
objective-c - CADisplayLink を動的周波数タイマーとして使用する
ユーザーが設定した頻度に基づいて、アプリ内のいくつかの画像をフェードイン/フェードアウトするために NSTimer を使用しています。たとえば、ユーザーが頻度を 5 秒に設定した場合、5 秒ごとに次のコードが実行されます。
(正確なコードは重要ではなく、フェードイン/フェードアウトの全体的な考え方だけです。)ただし、StackOverflow やさまざまな Web サイトで多くの人が指摘しているように、NSTimer を使用するとアニメーションが途切れる結果になります。フレームレート。そこで、代わりに CADisplayLink を使用しようとしました:
ただし、これは望ましい効果がありません。画像は、5 秒ごとにフェードイン/アウトするのを待つのではなく、非常に高速に連続して表示されます。
それを行う適切な方法は何ですか?
ios - 実行ループから CADisplayLink を削除するとゲームがクラッシュすることがある
これは、ゲームをプレイするたびに発生するわけではなく、5 回または 10 回のプレイごとに発生する可能性があります。ゲームが終了したら、CADisplayLink (Flappy Bird のパイプのように、プレイ エリアをアニメーション化するために使用します) を実行ループから削除します。ただし、まれに、その行でクラッシュします。行の横には、次のものがあります。
これはコードです:
最初の CADisplayLink 部分をコメントアウトすると、とにかく 2 番目の部分でクラッシュします。
これはスタックトレースです:
上記と同じ「スレッド1」エラーがあります。
何が起こっている??
ios - iOS アプリの FPS (1 秒あたりのフレーム数) をプログラムで計算する方法はいくつありますか?
について話しているのでprogrammatically
、楽器は考慮していません。
事前にリストされているいくつかの参照:
- iPhone アプリの fps (1 秒あたりのフレーム数) を計算する
- 画面上の iOS で FPS を表示する (Instruments なし)
- iOS UI はどのフレームレートでアニメーションを実行しますか?
1. CADisplayLink の使用
ドキュメントによると、
duration プロパティは、フレーム間の時間を提供します。アプリケーションでこの値を使用して、ディスプレイのフレームレートを計算できます...
私のデモ プロジェクトでは、UITrackingRunLoopMode の mainRunLoop に displayLink を追加します。
duration
FPS の計算に使用します。しかし、私の予想外ではduration
、tableView がスムーズにスクロールするかどうかに関係なく、常に 0.016667 (~ FPS 60) です。
tableView ラグを作成する方法は、次のように 1 行追加することです- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
。
それから私はに目を向けましたdisplayLink.timestamp
、そしてそれはうまくいきました。
2.観察drawRect:
?
私の2番目のアイデアは、を観察することですdrawRect:
。tableViewがスクロールdrawRect:
すると、フレームごとに呼び出され、呼び出し間の時間差に従ってFPSを計算できると思いましたdrawRect:
。
しかし、それは失敗しました。これは、drawRect:
が 1 回だけ呼び出されたためです (while セルが何度も)。この方法は に似てUsing CADisplayLink
いますが、観察するために間違った位置/方法 ( などdrawRect:
) を選択した可能性があります。観察するための推奨される方法はありますか?
質問:
- 計測器が FPS を正確に測定する方法は?
- ドキュメントは
using duration to calculate FPS
間違っていると言っていますか? - FPS を計算するために観察する正しい/最良の方法は何ですか?
ありがとう!