問題タブ [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 - UIScrollView zoomToRect が指定された四角形にズームしない (UITouch CGPoint から作成)
私のアプリケーションには、1 つのサブビューを持つ UIScrollView があります。サブビューは、drawLayer イベントのレイヤーを使用して PDF ページをそれ自体に印刷する拡張 UIView です。
組み込みのピンチを使用したズームはうまく機能します。setZoomScale も期待どおりに機能します。
zoomToRect 関数に苦労しています。特定のCGPointからCGRect zoomRect変数を作成するオンラインの例を見つけました。
touchesEnded関数では、ダブルタップがあり、それらが完全にズームアウトされている場合、ダブルタップしたピンチの中心でピンチアウトしているかのように、作成した PDFUIView をズームインしたいと考えています。
したがって、ダブルタップした場合に zoomToRect を利用する関数に UITouch 変数を渡すとします。
私はリンゴのサイトで見つけた次の機能から始めました:
以下は、私の UIScrollView 拡張クラスの修正版です。
これを行うと、UIScrollView は中央ではなく上の zoomRect の右下端を使用してズームするように見えます。
このようにUIViewを作ると
赤いボックスが表示され、タッチ ポイントが中央で死んでいます。
注: 私は PC からこれを書いています。Mac で 2 分割の部分をいじったことを思い出したので、タッチ ポイントが中央にある四角形が描画されると仮定してください。UIView が中心から外れていても、正しい場所にズームされていれば問題ありません。
ただし、zoomToRect を実行すると、ズームイン結果の左上にある zoomRect の右下を使用しているように見えます。
また、UIScrollView をクリックする場所に応じて、さまざまな場所に固定されることに気付きました。真ん中にクロスがあり、ポイントを反映しているように見えますが、真ん中の左側のどこかが負の反射であり、中央の右側のどこかが正の反射ですか?
これは複雑に思えますが、UIView が描画できたので、描画された四角形にズームするだけではいけませんか?
高品質でスケーリングする PDF を作成する方法を理解するために多くの調査を行ったので、CALayer を使用すると座標系から外れている可能性があると思いますか? しかし、UIScrollView に対しては、768x985 のサイズのビューとして扱う必要があります。
これは一種の上級者向けです。zoomRect を作成するコードはすべて適切であると想定してください。UIScrollView にある UIView の CALayer には、より深いものがあります。
objective-c - マスクを使用したCALayerのブラインドダウンアニメーション
画像に「ブラインドダウン」効果を作成して、画像が「ブラインドダウン」して表示されるようにしたい。
このJavaScriptトランジションのようなもの: https ://github.com/madrobby/scriptaculous-http : //madrobby.github.io/scriptaculous/effect-blinddown/
マスクの位置を手動で変更すると、マスクの背後にある画像が非表示および表示されるため、マスクは正しく設定されていますが、アニメーション化されません。それは最終的にアニメートの最終位置になり、実際にブラインドになることはありません。
助けてください!たぶん、これはブラインドダウン効果を達成するための最良の方法ではありませんか?
iphone - 対角線を中心にCALayerを回転させるにはどうすればよいですか?
iPhoneアプリケーションのようなボードゲームで使用するフリップアニメーションを実装しようとしています。アニメーションは、回転して背中の色に変わるゲームピースのように見えるはずです(一種のリバーシピースのようなものです)。直交軸を中心にピースを反転させるアニメーションを作成できましたが、z軸を中心に回転を変更して対角軸を中心に反転しようとすると、実際の画像も回転します(当然のことながら)。代わりに、対角軸を中心に画像を「そのまま」回転させたいと思います。
私は変えようとしましlayer.sublayerTransform
たが、成功しませんでした。
これが私の現在の実装です。これは、アニメーションの最後に鏡像を取得する問題を解決するためのトリックを実行することによって機能します。解決策は、実際にレイヤーを180度回転させるのではなく、レイヤーを90度回転させ、画像を変更してから元に戻すことです。
最終バージョン:個別のキー付きアニメーションを作成し、各フレームの変換行列を計算するというLorenzosの提案に基づいています。このバージョンでは、代わりに、レイヤーサイズに基づいて必要な「ガイド」フレームの数を推定し、線形キーアニメーションを使用します。このバージョンは任意の角度で回転するため、対角線を中心に回転するには45度の角度を使用します。
使用例:
実装:
元のコード:
iphone - CALayerサブクラスのカスタムプロパティのアニメーション化
myIntというNSIntegerプロパティを持つCALayerサブクラスMyLayerがあります。このプロパティをCABasicAnimationでアニメートしたいのですが、CABasicAnimationはいわゆる「アニメート可能な」プロパティ(境界、位置など)でのみ機能するようです。カスタムmyIntプロパティをアニメート可能にするためにオーバーライドできるものはありますか?
iphone - CALayer/UIView (または OpenGL) を 3D でラップ/ワープする (iPhone)
3D空間でわずかに歪んだり曲げたりしようとしているUIView(したがってCALayer)があります。つまり、私の UIView がフラット ラベルであり、ビール瓶を部分的に包み込みたいとします (360 度ではなく、「片側」のみ)。
ビューのレイヤーに変換を適用することでこれが可能になると考えましたが、私が知る限り、この変換はレイヤーの回転、スケール、および平行移動に一様に制限されています。控えめに言っても、この時点で私の線形代数はぼやけているので、ここで間違っている可能性があります。
どうすればこれを達成できますか?
iphone - ネストされた CALayers が透視変換を取得しない
アプリケーションの 1 つで CALayers を使用して 3D スタイルの効果を作成しようとしています。ただし、ネストされた CALayer にはパースペクティブが適用されていないようです。
疑似コードで説明するために、パースペクティブが適用されたレイヤーがある場合、次のようにします。
追加してから、次のようにレイヤーを追加します。
パースペクティブは期待どおりに適用されます。ただし、レイヤーをさらにネストしようとすると
ネストされたレイヤーは、回転するとフラットになります。
あたかも、スーパーレイヤーがレイヤー階層でその直下にあるレイヤーにのみ変換を適用するかのようです。これは事実ですか?それとも私は何か間違ったことをしていますか?
iphone - Core Animationレイヤーを使用してGIFをアニメーション化しますか?
GIFをアニメーション化しようとしていますが、障害が発生しました。GIFの個々のフレームを使用し、UIViewのanimationImagesプロパティを設定することを試みている例があります。ただし、私のプロジェクトでは、アニメーション化するものはレイヤーを使用して描画されます。あまり複雑にすることなく、フレームをアニメーション化するためのすばやく簡単な方法を探しています。Layersと同等のanimationImagesはありますか?誰かアイデアはありますか?
iphone - CALayers は、UIView の境界の変更でサイズ変更されませんでした。なんで?
レイヤーにUIView
約8つの異なるCALayer
サブレイヤーが追加された があります。ビューの境界 (アニメーション化) を変更すると、ビュー自体が縮小します ( で確認しましたbackgroundColor
) が、サブレイヤーのサイズは変更されません。
これを解決するには?
iphone - CALayerのコンテンツを並べて表示するにはどうすればよいですか?
CALayer全体にCGImageを並べて表示したいのですが、拡大したいだけのようです。
サンプルコード:
できればサブクラス化は避けたいと思います。
iphone - UITableViewCell で CALayer を使用する
テーブルビューの各セルに、ユーザーが右からスライドできるバーが必要です。バーにはアイコンを配置する予定です。したがって、これを行うために、UITableViewCell をサブクラス化しました。セルに drawRect を実装し、セルにグラデーションと背景色を既に描画しています。そこから、CALayer を作成し、フレームと背景色を指定して、サブレイヤーとして Views subLayers 配列に追加します。私はそれをすべて行うことができ、各 UITableViewCell に私のレイヤーを表示します。
セルにタッチイベントを追加して、ユーザーがセルに触れたときに検出できるようにし、テストのためにユーザーがスワイプするとCALayerが広くなるようにしました。しかし、問題は、UITableView がスクロールして CALayer が拡張されたセルを再利用すると、CALayer が再作成されないことです。私が試してみました
デリゲートの drawLayer:inContext メソッドを使用しましたが、呼び出されません。UITableViewController のセルで setNeedsDisplay を呼び出すことも試みましたが、再描画が発生することを期待していますが、機能しません。
何が欠けているのかわかりません。CoreGraphics と CoreAnimation は初めてです。CoreAnimation Developers Guide を読みましたが、何か足りないと思います。どんな助けでも素晴らしいでしょう。