問題タブ [cashapelayer]
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.
cocoa-touch - containsPoint は CAShapeLayer では機能しませんか?
UIView のメイン レイヤー内に 2 つの CAShapeLayers があります。CAShapeLayers には複雑な形状があり、ポイントが形状の境界内で触れられたかどうかを知る必要があります。また、どの形状に触れたかを知る必要があります。
containsPoint を試していますが、何も機能しません。
uikit - CAShapeLayer のユーザー操作が遅い
私は CAShapeLayer を持っており、ユーザーの指に導かれて画面上を移動するという単純なタスクを実行する必要があります。
問題は、動きが遅すぎることです。レイヤーは動きますが、ラグがあり遅く感じます。
UIImage が移動される別のテスト アプリがあり、遅延がまったくなく、画像が即座に移動します。
これを克服するにはどうすればよいですか?
ありがとう!
calayer - CABasicAnimationコールバックを使用する代わりに?
CAAnimationは、標準の「animationDidStart:」/「animationDidStop:」メソッド以外のコールバック関数を割り当てるためのメカニズムを提供していません。
オーバーラップする2つのCALayerを利用するカスタムUIControlがあります。このコントロールの目的は、昔ながらのソナーに似ています。最上層のコンテンツには、絶えず回転する画像が含まれています(この層を「ワンド」と呼びます)。そのレイヤーの下には、ワンドがブリップを通過するときにブリップをレンダリングする「spriteControl」レイヤーがあります。
ブリップが表すオブジェクトは、spriteControlによってプリフェッチされ、非表示のCAShapeLayersに編成されます。CABasicAnimationを使用してワンドを一度に10度回転させ、次に「animationDidStop:」メソッドを使用して、ワンドレイヤーの現在の回転値(別名見出し)を取得し、ブリップインおよびフェードアウト効果をシミュレートするための1.0〜0.0。最後に、プロセスは無期限に最初からやり直されます。
CAAnimationコールバックを使用するこのアプローチでは、ワンドが「ping」位置(つまり、10度、20度、270度など)に到達するタイミングが常に他のレイヤーのブリップの照明と一致することが保証されますが、停止の問題があります。 、再計算し、10度ごとにアニメーションを開始します。
NSTimerを生成して、ワンドのプレゼンテーション層の角度を照会して見出し値を取得するメソッドを起動できます。ただし、これにより、ワンドとブリップのハイライトの同期を維持することがより困難になり、および/または一部が完全にスキップされる原因になります。このアプローチについては、ここで少し説明します。CABasicAnimationがアニメーション化されているときに、どのようにコールバックできますか?
したがって、私の質問は、OpenGL ESを使用してコントロールを再実装せずに、ワンドレイヤーの回転のパフォーマンスを改善するためにできることがあるかどうかです。(これはOpenGL環境で簡単に解決できることを理解していますが、ここで使用するには、大規模な再設計が必要であり、それだけの価値はありません。)パフォーマンスの問題は軽微ですが、あるという感覚を揺るがすことはできません。簡単で明白なことで、その間に高価な回転計算を実行するのを一時停止することなく、ワンドを無期限にアニメーション化できます。
ここにいくつかのコードがあります:
ios - iPhoneでCAShapeLayerとCoreAnimationを使用した単純な紙吹雪効果?
私は自分のアプリでかなりシンプルなゲームを構築しています。アプリのUIは多くのコアアニメーションに基づいているため、ゲームも同様です。CAShapeLayerとコアアニメーション(「ロープを切る」の紙吹雪のスタイル)を使用して、ゲームの簡単な紙吹雪効果を実現しようとしています。
どんな助けや指示もいただければ幸いです。
iphone - CAShapeレイヤーの上にUIImageを表示するにはどうすればよいですか?
UIImage
の前にを描画するのに問題がありCAShapeLayer
ます。背景にベクター画像があり、その前にアイコンがあります。最終的にこれをスケーリングおよびアニメーション化するため、ベクトルは重要です。UIImageView
そして、私はこれらを画面上にたくさん持っているので、パフォーマンスのために、たくさんのサブビューよりも低いレベルでこれを実行したいと思います。
私はもう試した:
- コンテナビューのレイヤークラスをに設定する
CAShapeLayer
CAShapeLayer
コンテナビューのサブレイヤーとしてを追加する- コンテナのレイヤーやサブレイヤー
content
を画像に設定するCGImage
- コンテナビューで画像を手動で描画します
drawRect
(ただし、私のQuartz-fuはかなり弱いです)
ほとんどの場合、図形の背後に画像が描画されるか(これは、それ自体がどのように合成されているかによるものであると漠然と理解していますCAShapeLayers
)、画像がまったく表示されません。確かにこれはサブビューに頼ることなく可能ですか?
iphone - 背景画像を CAShape に追加することは可能ですか? (iPhone)
たとえば、ベジエ形状に従って、画像を任意の方法で歪めようとしています。CAShapeLayer を使用して形状を作成しましたが、その内容を Image に設定してもうまくいかないようです。その形状に合わせて画像を歪ませるにはどうすればよいですか? それは可能ですか?
ありがとうございました!
iphone - iOS のカスタム イメージ マスク
画像のマスキングに問題があります。私はゲーム「パズル」をしていて、カスタム イメージを作成する必要があります。カスタムトリミングの2つの方法を見つけて試しました:
- プロパティを使用し
CALayer.mask
ます。 - プロパティを使用し
UIImage.mask
ます。
最初のオプションでは、カスタム パスを作成し、それをCAShapeLayer.path
プロパティに割り当ててCAShapeLayer
から、プロパティに割り当てCALayer.mask
ます。最後に、カスタムトリミングされた画像があります。2番目のオプションでは、最初にCGImageMaskCreate()
メソッドを使用し(以前に作成したパズルのブラックマスク画像を使用します)、次にCGContextClipToMask()
. どちらのオプションでも、パフォーマンスに問題があります (ほとんどの場合、画像を 16 のパズルにトリミングして画面上にドラッグする場合)。
カスタムの方法で画像をトリミングする他の方法はありますか。(パフォーマンスの問題を解決する方法がわかりません)。前もって感謝します。
ios - CAShapeLayer の塗りつぶしの描画をアニメーション化する
この素晴らしい記事http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayerで概説されているように、CAShapeLayer を使用してパスを描画して遊んでいますが、私はレイヤーの塗りつぶしをアニメーション化する方法があるかどうか疑問に思っています。
たとえば、画面に描画したいテキストがありますが、テキストのストロークしか描画できず、塗りつぶしは描画できませんでした。別の例として、塗りつぶされた星の形をアニメートしたいと考えています。
これは CAShapeLayer または他のオブジェクトを使用して可能ですか?
ありがとう!
path - ヘルプ-UIScrollViewでのCAShapeLayer(つまりパス)のスケーリング
私は問題を抱えています、そしてあなたがそれで私を助けてくれることを願っています。ちなみにこれはiPad用です。
UIScrollView、UIImageView、CAShapeLayer、およびCGMutablePathRefがあります。
1-それで、UIImageViewに画像をロードしました
2-次に、ファイルからすべてのパスを解析し、それらをCAShapeLayerに追加しました。つまり、各CAShapeLayerがパスです。
3-次に、すべてのCAShapeLayerをUIImageView.layerに追加しました
4-ステップ3を実行したので、以下の関数を使用して、画像とパスを保持するビューを返すことができます。これは、パスと画像を一緒にスケーリングするのに役立ちます。
5-次に、UIImageViewをUIScrollViewに追加しました。
6-次に、UIScrollViewをサブクラス化して、touchesBeganなどを取得できるようにしました。
*注:touchesBeganなどのすべてのタッチイベントは、CGPathContainsPoint(aLayer.path、&transf、touchPoint、NO)を使用してクリックすると、すべてのパスを検出できます。また、ズーム後にビューをスクロールすることもでき、正常に動作します。
*現在の問題は次のとおりです。
ズームイン/ズームアウトするたびに、CAShapeLayerは細かくスケーリングされますが、(パスの元の座標)がスケーリングされていないようです。少なくとも、それが私が信じていることです。CAShapeLayerをクリックしても応答しないためですが、元の場所またはCAShapeLayerが表示されている場所の近くをクリックすると、CAShapeLayerが応答します。
すべてのCAShapeLayerを配列に入れ、ビューから消去して再度追加しようとしましたが、何も変更されませんでした。UIImageViewの代わりにCAShapeLayerをUIScrollViewに追加することにより、CAShapeLayerを個別にスケーリングするなど、他のことも試しました。次に、現在適用されているスケールを取得し、それをすべてのCAShapeLayerに適用しますが、それでは良い結果は得られませんでした。
-添付のスクリーンショットを確認してください。彼らが助けてくれることを願っています。
よろしくお願いします。
*画像をスケーリングする前:http: //imageshack.us/photo/my-images/193/beforescaling.jpg/
*画像のスケーリング後:http: //imageshack.us/photo/my-images/818/afterscaling.jpg/
**編集済み:
-考えられる解決策:
1-CAShapeLayerのCATransform3DIdentityを更新する必要がある可能性があります。しかし、私はまだそれを行う方法を知りません。
2- CATransform3DTranslateを使用する必要がある可能性がありますが、まだ使用方法がわかりません。