問題タブ [calayer]
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 - CALayerでアニメーション化されたプロパティの変更を監視する
たとえばCABasicAnimation
、のプロパティをアニメーション化するものがあります。時間の経過とともに変化するプロパティを観察できるようにしたいのですが、100%機能する方法は実際には見つかりませんでした。CALayer
bounds.origin
presentationLayer
のbounds.origin
キーパスでKVO(キー値観測)を使用してみました。システムは、オブザーバーが解放される前にオブジェクトが解放されると文句を言い、プレゼンテーション層は一時的なものにすぎないと私に思わせます。キーパスpresentationLayer.bounds.origin
としての監視は機能しません。別のレイヤーにプロパティを作成し、それをアニメーション化してみました。たとえば、を宣言してそのレイヤー
@property
に作成し@dynamic
ました。ただし、この新しいプロパティは、プレゼンテーション層にアクセスしたとき(アニメーションの最後など)にのみ変更され、アニメーションの実行中は更新されないようです。needsDisplayForKey
アニメーション中に更新をトリガーする#2のプロパティで使用しましたが、これらの問題については次のようになります。CALayer
がゼロ以外のフレームを持っている場合にのみ機能します。このレイヤーはCAShapeLayerまたはサブクラスである可能性があるため、フレームがゼロである可能性があります。- そのレイヤーに対してトリガーされているように見えます
setNeedsDisplay
が、実際にはプロパティの変更を監視するだけでそのレイヤーを描画していないため、再描画させたくありません。
をスケジュールしてみました
NSTimer
が、タイマーコールバックのサンプル内でpresentationLayer
。これも機能しますが、これらの問題に対して:- タイマーは、アニメーションの更新とわずかに同期していない可能性があります。
- 元のアニメーションが別のアニメーションに取って代わられることがあるため、アニメーションの実行中およびアニメーションの実行中にのみタイマーを実際に起動することは困難です。
助言がありますか?これはすべてiPhoneOS3.0/3.1にあります。
objective-c - コア アニメーション レイヤーの webview
CALayer 内に webView を作成したかったのです。些細なことかもしれませんが、私は CA に頭を悩ませているところです。誰でも助けていただけませんか?
乾杯ロン
iphone - CALayerのbringSubviewToFront
レイヤーを他のレイヤーの上に表示する方法があるかどうか疑問に思っています。クラスのようなものbringSubviewToFront
。のプロパティでUIView
実行できると思いますが、これは、すべてのレイヤーを確認してから適切な値を設定する必要があることを意味します。zPosition
CALayer
zPosition
前もって感謝します。
iphone - 合成色:iPhoneのCALayerとブレンドモード
iPhoneでコアイメージを使用しようとしています。クォーツを使用して色を合成してuiviewを描画することはできますが、各コンポーネントをに分割したいと思いますCALayer
(UIviewはより多くのリソースを消費します)。
そのため、背景のビットマップをフィルタリングするために使用する白いマスクがあり、別のブレンディングモードを試してみたいと思います。残念ながら、レイヤーは色を「追加」しているだけです。
これが私のコードです:
これがメインビューdrawrect
コードで、CALayerを使用しています。
何か問題がありますか?
iphone - iPhoneレイヤーの混乱
私は本当に単純であるべきことをやろうとしています。ビューの 1 つにグラデーションを追加したいと考えています。self.view には追加できますが、viewWithGradient には追加できません。コードは次のとおりです。
viewWithGradient は、viewController (self.view) 内のメイン ビュー内の小さなビューです。この viewWithGradient に対する他のビューは 1 つだけです。これは、viewWithGradient の約半分の領域しか占めない UILabel です。背景は透明ですが、ラベルのテキストは白で描画されます。UILabelの上ではなく、self.viewではなく、UILabelの下にグラデーションを配置する必要があります。
私は現在、フレーム/境界がグラデーションを画面外に置く可能性があると考えています。誰かが私が見逃しているものを見ていますか? これは CALayer の使用法の中で最も単純なように思えますが、私はあまりにも多くの時間を費やしてきました。
core-animation - CALayer renderInContext
私が使う
成功しましたが、「renderInContext:context」を使用してコンテキストからCGImageを取得しましたが、画像効果が変更されていないことがわかりました!
CALayer からこの効果画像を取得するにはどうすればよいですか?
iphone - iPhoneレイヤー管理-ベストプラクティス
ルイ-ご意見ありがとうございます。これが私がしたことと、私が理解していない現在の問題です。
メニュー(2)は、タッチに応答するUIImageViewです。それぞれが独自のクラスです。あなたがそれらを呼んだ「スプライト」もタッチに反応します。
メニューとスプライトをレイヤーに追加する.mで、次のコードを使用して2つのコンテナーレイヤーを作成しました:menuContainer =[CALayerlayer]。
spriteContainerの上にあるmenuContainerで注文しました。さて、スプライトはメニューの下に移動します-素晴らしいです!しかし、その過程で、スプライトはタッチに応答しなくなり(menuContainerレイヤーの下にあるため、これは理解できます)、メニューもタッチに応答しなくなりました(取得しないでください)。状況を混乱させ続けると、スライダーをポップアップすることによってマルチタッチジェスチャに応答するmenuContainerに追加されたレイヤーは、マルチタッチを読み取り、スライダーをポップアップしますが、スライダーをスライドできません。これは私を完全に混乱させました。
ありがとう。
私のアプリは背景レイヤーを構築してから、常に一番上にあるはずのメニューレイヤーを構築しています。この後、多くの移動レイヤーを追加し、多くの移動レイヤーをすばやく削除します。
私の問題は、メニューレイヤー(4つあります)を常に他のレイヤーの前に配置したいということです。レイヤー階層を構築し、insertsublayer:atindex:メソッドを使用して、メニューを想定インデックス1000にし、200などの低いインデックスに多数の移動レイヤーを挿入することを考えました。200に1つのレイヤーを挿入してから次の200で、200に割り当てられた最初のレイヤーがシフト(201)されますか、それとも吹き飛ばされますか?
insertsublayer:below:を使用してレイヤーを挿入しようとしましたが、目的の結果が得られません。
助けてくれてありがとう。
iphone - CALayer insertSublayer: atindex: は破壊的ですか?
insertSublayer:abc.layer atindex:xy を使用すると、現在 index:xy にあるレイヤーで何が起こるかについて、ドキュメントは明確ではありません。私の実験では、さまざまな結果が得られました。私の理解では、インデックス 0 はユーザーから最も離れています (他のすべてのレイヤーはその上にあります)。
index:0 で insertSublayer:abc.layer を呼び出し、def.layer が既に index:0 にある場合、def.layer は破棄されるか、index:1 にシフトされますか?
ありがとう。
iphone - 別の animationDidStop から開始された 2 番目のアニメーションを表示できません
CoreAnimation が iPhone シミュレーターで複数のアニメーションを連続して実行するのに問題があります。アプリケーションには、アニメーション化する多くのレイヤーがあります。これらのレイヤーはすべて、アプリケーションの UIView に関連付けられたレイヤーのサブレイヤーです。最初のサブレイヤーの位置を (明示的なアニメーション - CAKeyFrameAnimation を使用して) アニメーション化した後、animationDidStop デリゲート メソッドで次のことを行います。
- スーパーレイヤーからレイヤーを削除します
- CATransaction を開始して、他の 2 つのサブレイヤーの位置を同時にアニメーション化します。これらのレイヤーも、個々の CAKeyframeAnimations をそれぞれのレイヤーに追加して明示的にアニメーション化します。
- 次に、最初のレイヤーを別のコンテンツで再利用し、それをスーパーレイヤーの別の位置に追加します (意図的にアニメーション化されていません)。
アプリケーションを実行すると、最初のアニメーションが発生し、レイヤーが削除され、レイヤーが新しい位置に新しいコンテンツとともに追加されますが、ステップ 2 で 2 つのレイヤーのアニメーションは表示されません。興味深いことに、私はトランザクションでアニメーション化されている 2 つのレイヤーのそれぞれに対して animationDidStop 呼び出しを取得します。これらの呼び出しを取得すると、アニメーションが発生しているように見えますが、アニメーションは画面に表示されません。また、トランザクションを正しく設定していない場合に備えて、トランザクションを削除しようとしましたが、同じ結果が表示されました。
この方法で複数のアニメーションをリンクすることは可能ですか?
洞察や提案は大歓迎です。よろしくお願いします。