問題タブ [catransaction]
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.
iphone - CAKeyframeAnimationが終了したときにセレクターを指定するにはどうすればよいですか?
CAKeyframeAnimationを使用して、CGPathに沿ったビューをアニメーション化しています。アニメーションが完成したら、他のメソッドを呼び出して別のアクションを実行できるようにしたいと思います。これを行う良い方法はありますか?
UIViewのsetAnimationDidStopSelectorの使用を見てきましたが、ドキュメントからは、UIViewアニメーションブロック(beginAnimationsおよびcommitAnimations)内で使用された場合にのみ適用されるように見えます。念のため試してみましたが、うまくいかないようです。
次にいくつかのサンプルコードを示します(これはカスタムUIViewサブクラスメソッド内にあります)。
私が考えていた回避策は機能するはずですが、最善の方法ではないようですが、NSObjectのperformSelector:withObject:afterDelay:を使用することです。遅延をアニメーションの長さに等しく設定する限り、問題はありません。
もっと良い方法はありますか?ありがとう!
objective-c - CATransactionが設定した期間を尊重しないのはなぜですか?
iPhoneアプリをMacOSXに移植しています。このコードは、iPhoneで正常に使用されていました。
Macバージョンでは、次のようにCATransactionを使用してアニメーションをグループ化します。
アニメーションは、継続時間が1.0秒であることを除いて、正常に実行されています。setAnimationDurationを変更できます。何かを呼び出すか、完全に省略しても、アニメーションの継続時間は毎回1.0秒です。また、setAnimationTimingFunction:呼び出しは何もしていないと思います。ただし、setCompletionBlock:は機能しています。これは、アニメーションの完了時にそのブロックが実行されているためです。
私はここで何が間違っているのですか?
iphone - CATransaction内のカスタムCALayerプロパティをアニメーション化する
これまで、とのおかげで、CALayerサブクラスのカスタムプロパティをアニメーション化することができまし+ (BOOL)needsDisplayForKey:(NSString *)key
たCABasicAnimations
。
animationDidStop:finished:
ただし、すべてのコードが1つのメソッドで実行されるため、アニメーションの連鎖は非常に難しい場合があります。
そこで、新しいブロック構文をサポートしているので、に切り替えたいと思いましたCATransactions
。これにより、で完了ブロックを指定できるようになります+ (void)setCompletionBlock:(void (^)(void))block
。
しかし、CATransaction
いわゆる「アニメーション化可能なプロパティ」しかアニメーション化できないように見え、needsDisplayForKey:
実装されたメソッドを使用しても、カスタムレイヤープロパティでは機能しません。
CALayer
では、でアニメーション化するカスタムプロパティを作成する方法はありCATransaction
ますか?
編集: 私の意図は、線に沿って何かをすることです:
myProperty値のへの更新はnewValue
アニメーション化されません。actionForLayer:forKey:
myLayerを管理するビューに実装
して、を返すようにしましたCABasicAnimation
。ただしactionForLayer:forKey:
、キーで呼び出されることはありませんmyProperty
。はい、それはサブレイヤーに過ぎmyLayer
ません。はい、view.layer
のデリゲートをmyLayer
包含ビューに設定しました。
objective-c - CALayer - レイヤー サイズをアニメーション化すると、アニメーションの実行がブロックされる
一連のレイヤーが配置され、単一の「アクティブ化された」レイヤー(基本的にユーザーがクリックしたレイヤー)が同時に配置およびサイズ変更される方法があります。アクティブ化されたレイヤーを含むすべてのレイヤーは、より大きなレイヤーのサブレイヤーです。これが私の方法です:
私が経験している問題は本当に奇妙です。上記のコードを使用すると、アニメーションは実行されません (非アクティブなレイヤーのアニメーションも実行されません)。しかし、新しいフレームのサイズと幅を設定する行をコメントアウトするとすぐに、魔法のようにアニメーションが再び機能し始めます。
これが起こるべき理由はありますか?
iphone - CAトランザクション遅延
コア アニメーションでインプリシット アニメーションの遅延を設定するにはどうすればよいですか? kCATransactionAnimationDelay がないことに驚いています。
serialization - 複数の CAAnimation を順次結合
私は CATransactions について読んでいて、これが私の問題を解決するのに役立つかもしれないと考えました。
これは私がやりたくないことです。同じレイヤーに 3 つのアニメーションがあり、それぞれに独自の長さがあります。CAKeyframeAnimation と CGMutablePathRef を使用してアニメーションを作成します。
たとえば、次のように言います。
- anim1 -> 持続時間 5 秒
- アニメ2→3秒
- アニメ3→10秒
今、それらを順番にシリアライズしたいと思います。CAAnimationGroup を使用しようとしましたが、アニメーションが同時に実行されます。CATransaction について読みましたが、解決策はありますか? 少し例を挙げていただけますか?
手伝ってくれてありがとう !
performance - iOS Core-Animation: CATransaction / Interpolating transform matrix のパフォーマンスの問題
iPhone アプリのパフォーマンスをテストしています。
質問: 古い変換マトリックスと新しい変換マトリックスの間の補間というコア アニメーションのデフォルト動作を無効にすると、パフォーマンスが大幅に向上するのはなぜですか?
彼らは、計算コストが非常に高くなる可能性のある何をしている可能性がありますか? 2 つのマトリックス間の補間に世界で最も精巧な技術を使用しているとしても、これが 5fps になるとは信じられません。
プロセスが M_resultant = k*M_last + (1.-k)*M_target 以外のものであるとは想像できません
iphone - 複数のCALayerを同時に正常にアニメーション化するにはどうすればよいですか?
画面上の任意のパスに沿ってその位置を変更するために、単一のレイヤーを正常にアニメーション化しています。私は今、このアニメーションを複数回複製して、何かが角を曲がっているような錯覚を与えようとしています。コードをCATransaction内に配置し、ループの反復ごとに開始位置をインクリメントするループに配置し、ループの後にCATransactionをコミットしました。コードがループしていない場合(つまり、1つのレイヤーだけがアニメーション化されている場合)、アニメーションの最後にすべてのレイヤーが表示されます(アニメーションの最後にアニメーションの最後でデリゲートがそれらを削除する前に、animationDidStopで表示される効果は同じです)。 )。
私が書いたコードは次のようになります。
ここで、[board caclulatePath:s]は、CGPointを表すNSValueのNSArray*を返します。
自分が求めている効果をどのように達成できますか(同じパスをたどるlaser.pngの複数のコピーはどれですか)?[Laser.pngは20pxx20pxの赤い正方形です];
ios - +[CATransaction同期]トランザクション内で呼び出されます
サービスからデータを読み込んでいるときにiPadアプリを閉じると、アプリは閉じますが、何もせずにすぐに再び開きます。この時点では、私は何もできません。アプリを閉じることができず、アプリまたはデバイスを操作できません。デバイスを再度使用する唯一の方法は、デバイスを再起動することです。アプリはクラッシュせず、単にデバイスを無効にします。
これが発生すると、 applicationWillResignActiveとapplicationDidEnterBackgroundの直後に次の行がコンソールに3回表示されます。
アプリがクラッシュしても大丈夫ですが、デバイスが完全に役に立たなくなるという事実は大きな問題です。このバグを傍受したり、CATransactionでこの問題が発生したときに何らかの方法で検出できれば、それで問題ありません。
何か案は?
core-animation - 親NSViewのサイズを変更している間、CALayerを同じ位置に保つ方法は?
CALayer
親レイヤー (レイヤー ホスティングのルート レイヤー) の左下隅に描かれた小さな赤いボックス (インスタンス) を想像してくださいNSView
。
親ビューのフレームが変更されても、赤いボックスは画面上の同じ位置に留まる必要があります。これを行うには、親ビューの左下隅を基準にして位置を調整します。
問題は、場合によってはちらつきがあり、正しい位置に表示される前に、拡張フレームの左下隅に赤いボックス レイヤーが描画されているのが見えることです。
フレームと位置の変更を 1 つにラップするとCATransaction
、両方の変更が一緒に行われると想定しましたが、常に機能するとは限りません (ドキュメントでは、トランザクションを使用するとアニメーションが同時に開始されると書かれていますが、まだ競合があるようです)時々状態)。
NSView
子レイヤーを認識された位置に保ちながら、親のフレームを調整するにはどうすればよいですか?
例とコード:
私自身のアイデア:
赤いボックス レイヤーを非表示にし、位置を更新して、もう一度表示します
制約を使用して、右隅にバインドします。問題は、このオフセットも変更される可能性があり、同じちらつきの問題につながる可能性のある制約を更新する必要があることです。