問題タブ [catiledlayer]
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 - CATiledLayerレイヤーを持つサブビューを含むUIViewの描画を最適化する方法
多くのUIViewサブビューを含むUIScrollView内にUIViewがあります。これらの各サブビューには、CATiledLayerレイヤーがあります。さらに、(すべてのサブビューとともに)コンテキスト内にコンテナーUIViewを描画する拡大ルーペ機能があります。関連するコード:
これは、ルーペのdrawRectメソッドです。
そして、これは、サブビューが描画されるコンテナUIViewのdrawInContext:forRectメソッドです。
そして最後に、これはCATiledLayerを使用したサブビューのdrawRectメソッドです。
これで、すべてが意図したとおりに機能しますが、拡大ループがオンになっていて移動していると、アプリの速度が大幅に低下します。問題は、ルーペビューが移動されるたびに、そのdrawRectメソッドが呼び出され(拡大されたコンテンツを更新できるようにするため)、その後、コンテナUIViewなどのdrawInContextメソッドが呼び出されることです...その結果、すべてのCATiledLayersが画像を更新しますルーペが動かされるたびにタイル。
ご覧のとおり、ルーペのコンテキスト内でコンテナビューの大部分を描画しようとしましたが、これが行き詰まっています。このコンテナビューの大部分を「バッファリング」する方法がわかりません。そのため、ルーペを移動すると、再描画される四角形が「バッファリングされた」四角形を超えた場合にのみ、サブビューが再描画されます。
コードがずさんな/新しい場合は申し訳ありません-私はその真っ只中にいて、助けを探しています。
ありがとう!
objective-c - CATiledLayer で Core Data エンティティ情報を描画するときにスレッドを正しく処理する方法
非常に大きな Core Data ツリー構造の描画を CAtiledLayer にオフロードする方法を考えています。CATiledLayer は、バックグラウンド スレッドで描画を実行し、描画されるたびにタイルをフェードインするため、素晴らしいようです。ただし、描画の情報は設計上スレッド セーフではない Core Data コンテキストから取得されるため、描画コードが CD コンテキストにアクセスする必要があるという競合状態の問題が発生しています。
通常、Core Data でバックグラウンド タスクを実行する必要がある場合は、バックグラウンド スレッドで新しいコンテキストを作成し、既存のモデルと永続ストア コーディネーターを再利用して、スレッド化の問題を回避します。しかし、CATiledLayer はすべてのスレッド化を内部で行うため、コンテキストを作成するタイミングがわかりません。なんらかのコンテキスト共有が必要です。そうしないと、最初から適切なエンティティを CATiledLayer に渡すことができません。
このシナリオに対処する方法を提案している人はいますか?
乾杯、エリック・ポール。
objective-c - コアテキスト/コアイメージをラップするObjective-Cライブラリ?
CATiledLayerを使用して大きなスクロール可能なコンテンツを描画すると、私のアプリケーションでうまく機能します。あまりうまく機能しないのは、CのCoreTextおよびCoreImageAPIを使用して画像と複数行のテキストを描画することです。
私は、車輪の再発明を試みていること、C関数の周りに独自のObjective-Cラッパークラスを作成していることCGContextShowTextAtPoint
、すべてをミラーリングしていることCGContextSetTextMatrix(context, CGAffineTransformMakeScale(1, -1))
などを強く感じています。
UIKitのコンテキスト描画メソッドは、CATiledLayerでの同時バックグラウンド描画が原因で競合状態のクラッシュを引き起こすため、使用できません。
バックグラウンドコンテキストで使いやすくするためにコアテキストおよびイメージ関数をラップするObjective-Cライブラリはすでに存在しますか?
乾杯、EP。
更新:現在の状況では、 CoreTextについて詳しく説明しているAppleDocs以外の本やオンラインリソースのヒントも用意します。
iphone - CATiledLayer-setNeedsDisplayの後にすべてのタイルが再描画されるわけではありません
私の見解にはCATiledLayer
。ビューコントローラにはカスタムズーム動作があるため、-scrollViewDidEndZooming
すべてのタイルを再描画する必要があります。ただし、-setNeedsDisplay
ズームするたびにレイヤーで呼び出されても、すべてのタイルが再描画されるわけではありません。これにより、ズーム後にビューが正しく表示されない場合があります。(1つのタイルに表示されるはずのものが複数の場所に表示されています)。多くの場合、別のズーム後に自動的に修正されます。
関連するコードは次のとおりです。updatedRects
テスト用です-によって描画するように要求された一意の長方形を格納し-drawLayer
ます。
CanvasView.h:
CanvasView.m:
MyViewController.m:
これをテストするとき、ズームした後は常にビュー全体をスクロールして、すべてのタイルが表示されていることを確認しました。ビューが間違っているように見えるときはいつでも、予測された「更新されたrectの次の数」は、への次の呼び出しでの実際の「更新されたrectの数」よりも大きかった-updateCanvas
。これは何が原因でしょうか?
編集:
問題を視覚化するためのより良い方法は次のとおりです。が呼び出されるたびupdateCanvas
に、タイルを描画するための背景色を変更し、呼び出された時刻を記録するようにしました。色と時刻はに保存されcanvasView
ます。各タイルには、タイルの長方形、x軸に沿ったタイルのインデックス、背景色が設定された時間(秒)、およびタイルが描画された時間(秒)が描画されます。すべてが正しく機能している場合は、すべてのタイルが同じ色である必要があります。代わりに、これが私が時々見ているものです:
ズームアウトした後、間違った結果が表示されるだけのようです。この問題は、がズームアウトごとに複数回呼び出される可能性があるという事実に関連している可能性があります(編集:いいえ-複数回呼び出されません。)scrollViewDidEndZooming
。updateCanvas
iphone - CGContextDrawPDFPage によって使用されるメモリの割り当てを解除します
アプリを Instruments で分析すると、CGContextDrawPDFPage によって割り当てられたデータがすぐに解放されないことがわかりました。私のプログラムは多くの「メモリ警告」を受け取るので、できるだけ多くのメモリを解放したいのですが、このメモリを解放する方法がわかりません。
http://twitpic.com/473e89/fullでわかるように、このコードに関連しているようです
私はすでに AutoReleasePool をラップしようとしましたが、これは何の影響もないようです。スクリーンショットは、TiledView (メソッドが属するビュー) の割り当てが解除された後に取得されます。
誰かがメモリ使用量を減らすのを手伝ってくれることを願っています。
ios - UIScrollView内のPDFズーム
2835ピクセルのUIScrollView内に2835ピクセルのPDFファイルがあります。PDFを表示するには、CATiledLayerを使用します。
私の問題は、scrollViewをズームアウトすると(1未満のスケールで)、PDFの品質が非常に悪くなることです。scrollViewを(1より上のスケールで)ズームインすると、PDFが見栄えがするのは奇妙なことです。ズームイン(スケール* 10)すればするほど品質が良くなります。
ダウンスケールとアップスケールの両方の品質が良好になるようにコードを変更するにはどうすればよいですか?
uiview - CATiledLayer で使用する場合の UIView の「contentScaleFactor」の背後にある秘密は何ですか?
ご挨拶、
私は、iOS SDK に付属する「ZoomingPDFViewer」の例に触発されたアプリケーションに取り組んでいます。ある時点で、次のコードを見つけました。
私はそれが何をするのかについてもっと学ぼうとcontentScaleFactor
しました。それについて言及している Apple のドキュメントをすべて読んだ後、私は Google を検索しましたが、それが実際に何をするかについての明確な答えは見つかりませんでした。
ここに私が興味を持っているいくつかのことがあります:
contentScaleFactor
UIView/CALayer のコンテンツが描画されているときに、グラフィック コンテキストに何らかの影響があるようです。これは、高解像度ディスプレイ (Retina ディスプレイなど) に関連しているようです。実際にはどのような効果がcontentScaleFactor
あり、何に影響を与えるのでしょうか?を使用
UIScrollView
してズームするように設定する場合、たとえば私のcontentView ; contentViewのすべてのサブビューもスケーリングされています。これはどのように作動しますか?UIScrollView
ビデオ プレーヤーでさえもぼやけて拡大するように変更するプロパティはどれですか?
TL;DR: UIScrollView のズーム機能は「フードの下」でどのように機能しますか? 適切なコードを書くことができるように、それがどのように機能するかを理解したいです。
ヒントや説明は大歓迎です!:)
uiscrollview - UIScrollView の CATiledLayer に基づく UIView が最初にスクロールしない
UIScrollView に CATiledLayer に基づく UIView を追加しています。
ビューが最初に読み込まれるとき、UIScrollView の zoomScale を設定することで、UIView に合わせようとしています - これは UIView と階層化されたコンテンツに適合します。
画像のタイルを取得する方法があり、drawLayer:inContext でレンダリングしています。
これで、CATiledLayer ビューの scrollview/frame の contentsize が UIScrollView より大きい場合でも、最初はスクロールしません。
画面をつまんでズームしようとした瞬間、完璧にスクロールできます。
drawLayer:inContext で CGContext をスケーリングできません。これは、受け取ったコンテキストが画像全体ではなくタイルのものであり、画像を構成する 20 個のタイルがあるためです。
iphone - CATiledlayer が CGPath を歪める
CATiledlayers と UIScrollviews を使用して、さまざまな詳細レベルで CGPaths を描画しています。大きな絵(4000x4000)を描いています。iPhone では、これらの大きな写真の画像が歪んでしまいます。
私は最終的に解決策を見つけました。私の間違いは、タイル サイズを描画している画像のサイズに設定したことです (どこかの PDF サンプル デモからコピーしました)。解決策は、tileSize を最大 2000x2000 に設定することです。