問題タブ [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のサブレイヤーであるCALayerが、ズーム後にスケールを変更しないようにするにはどうすればよいですか?
PDFページを表示するために使用されるCATiledLayerがあります(このCATiledLayerは、UIScrollViewのサブビューであるUIViewのレイヤータイプです)。このページにオーバーレイマーカーを追加したいと思います。そこで、CATiledLayerにサブレイヤーを追加します。このサブレイヤーは、再び異なるマーカーのレイヤーをホストし、グループ化レイヤーとして機能します。
グラフィカルに、私は持っています:(私はCALayersでもある複数のマーカーを持っていることに注意してください、これは結局のところアスキーアートです)
pdfを描画するためのビューで正規のdrawLayer:inContext:を設定しました。
ズームして詳細を表示すると、PDFは正しくレンダリングされますが、マーカーは拡大縮小されます。CALayerの境界に何をしても、マーカーは常に大きくなり、ギザギザに見えます。
マーカーを初期化してビューを描画したときに最初に表示したときと同じサイズにしたいのですが。これは可能ですか?または私は間違ったアプローチを使用していますか?drawLAyer:inContext:メッセージに含まれているCALayerに対して特別な描画を行う必要がありますか?
ご覧のとおり、問題を解決するために欠けていることがあります。あなたが提供するどんな助けにも感謝します。
iphone - ScrollView/CATiledView が正しくズームしないのはなぜですか?
CATiledLayer に裏打ちされた UIScrollView があります。レイヤーはサーバーからタイルを取得し、drawLayer:inContext
が呼び出されたときに要求された内容に応じてタイルを表示します。外観は次のとおりです。
ズームインすると問題が発生します。タイルのサイズ (clipBox
長方形で示されている) が小さくなり、たとえば 32 x 32 ピクセルの場合、URL は 32 ピクセルに対して適切に形成されますが、画面に表示されるものはスケーリングされます。最大でデフォルトの tileSize (この場合は 128 x 128 ピクセル)。これらの画像を適切に描画するレイヤーを取得する方法はありますか。
iphone - UIWebView を並べて表示するには?
コンテンツのレンダリングとスクロールを改善するために、UIWebview でタイルを使用する必要があります。
Google でいくつかの情報を見つけようとしましたが、この件に関する例や技術情報はないようです。運が悪くてもCATiledLayerクラスでいくつかのテストを行っています...
基本的に、Mobile Safari が Web サイトのコンテンツに対して行うのと同じことを再現したいと考えています。市松模様の背景を見ると、Safari がどのようにタイルを作成するかがわかります。
どんな助けでも大歓迎です!
前もってありがとう、フランキー
xcode - CATiledレイヤーの質問〜
CATiled Layer を scrollView ではなく webView に適用する方法を考えていました。多くの本や検索を調べましたが、CATiled Layer を webView に正常に適用する方法についてはまったく何も見つかりませんでした。基本的な機能は、webView で Web サイトのレンダリングをよりスムーズにすることです。誰かがこれに関する洞察を提供できれば、本当に感謝しています。
ありがとう、-ジー-
iphone - ズーム時に異なるサイズの画像を変更するCATiledLayer(マップ関連:)
マップを表示する CATiledLayer を含む UIView を持つ UIScrollView があります。
非常に深くズームインできる概要から始めなければなりません。そこで、4 つの異なるサイズのマップ (最大のものは 5700 x 6700px のようなもの) で 4 つの異なる画像 (実際には PDF) を作成しました。
最小 (概要) を CATiledLayer に追加し、特定のズーム レベルで画像を交換します。
これまでのところ、これはちょっとうまくいきます。
問題は、最大のマップ (最も近いズーム) を表示すると、タイルが非常に大きくなり、それらを描画するのに時間がかかることです (そして、詳細/バイアスのレベルに応じて、アプリはクラッシュを警告するメモリを生成します)。
最大のマップから始めて、マップが最初に表示されるときにズーム レベルを最小に設定しようとしましたが、タイルが非常に小さくなるため (最小ズームを設定しないと)、概観を描画するのに時間がかかります、すべてがスムーズに動作します)。
マップを切り替えるときにタイルのサイズを調整しようとしましたが、どうやらうまくいきません。
どうすればこれを解決できますか?;)
助けてくれてありがとう...
編集:
私は今、2 つの別々の CAtiledLayers を定義し、特定のズーム レベルに達したときにそれらを交換しようとしていますが、アプリがクラッシュしますか?
オーマイ... :)
編集2:
わかりました-動作しました-多かれ少なかれ。現在起こっている唯一のことは、最大の画像を追加すると CATiledLayer が奇妙な動作をすることです。しばらくは正常に動作しますが、一定量のタイルが描画されると、メモリ警告が表示され、最終的にアプリがクラッシュします。私は実際に、目に見えないタイルがビューポートを離れるときに破棄されることを期待しています。これは起こらないようで、最終的にはすべてのタイルが描画され、iPhone メモリには多すぎるようです... :(
これを解決する方法はありますか?
iphone - CATiledLayer の大きな画像のクラッシュ アプリ
これは別の投稿に多少関連していますが、その投稿はちょっとめちゃくちゃになったので、ゼロから始めます。
巨大な画像 (5780x6700px) を含む CAtiledLayer があります。
タイル レイヤーはスクロールビューにあります。スクロールし始めると、明らかにレンダリングされたタイルが多すぎるところまでは問題ありません。次に、メモリ警告が表示され、アプリがクラッシュします。
メモリの警告が表示されたときにビューから tiledlayer を削除しようとしました。その内容をクリアし (rootLayer.contents = nil AND tiledLayer.contents = nil)、ビューに空の状態で再アタッチしました。うまくいきませんでした...
任意の入力に感謝します...
編集:
これまでのヒントをありがとう。私の仮定のいくつかは間違っているようです。画像を関数にロードして保持しました。これは、CATiledLayer の動作と矛盾していると思います。さらに、UIImage imageNamed:
いくつかのエラーも発生しているようです。次に、画像を読み込み、それdrawLayer:(CALayer *) inContentext(CGContextRef) ctx
を使用UIImage imageWithContentsOfFile:
して読み込みます。
これは、メモリが少なくなることなく動作するようです。
ただし、タイルの描画は非常に遅くなります:(
tiledLayer のセットアップは次のとおりです。
(int)level は、使用する画像を示します (特定のズームレベルで画像を切り替えています)。Level4は最大の画像です...
そして、ここに drawLayer 関数があります:
ええ - 知っています - 私は実際にコンテキストに 4 つの画像を描画します。PNGは、メイン画像に動的に追加する必要があるオーバーレイです...
画像を1つにマージしようとしましたが、これはさらにメモリ/ CPUを消費するようです;)
さらに助けていただければ幸いです。
iphone - CATiledView のパフォーマンスの向上
CATiledView のパフォーマンスを改善する方法を探していました。ビューはほぼ画面全体を占めます (iPad バージョンと iPhone バージョンがあります)。現在、タイルが完全に表示されるまでに約 12 秒かかります (両方のデバイスで 12 秒)。他のアプリが CAtiledView を使用しているのを見たことがありますが、タイルがいっぱいになるまでの時間ははるかに短くなっています。
私が使用している画像は 1 7000x5000 JPEG です。画像を 5500px に縮小しようとしましたが、読み込み時間に変化がないため、次のようなコードの問題であると思われます。
更新:画像のサイズを(半分以上)縮小しようとしましたが、違いはありません。
iphone - このCATiledLayer/PDFコードが遅いのはなぜですか?
コードは次のとおりです。
https://www.dropbox.com/s/o42wy36x4qhrbpt/PDFScroller.zip
ズーム用、ページング用のネストを実装するWWDC 2010PhotoScroller
サンプルコードを取得し、画像の代わりに複数ページのPDFを表示するために必要な最小限のコードと思われるものを交換しました。UIScrollViews
UIScrollView
できます。しかし、私のiPhone4では遅く、最初のページをペイントするのに約3秒かかり、iPodTouchではさらに遅くなります。個々のタイルをペイントしているのを見ることができます。この同じPDFは、タイルの描画が表示されずに、すでにより速く開きます。別のCATiledLayer
実装では、単一のCATiledLayer
/UIScrollView
およびtouchイベントを使用してページを変更するだけです。このテクニックを使いたいPhotoScroller
のですが、とてもいいです。
InstrumentsのCPUSamplerで見ましたが、PDFレンダリングコードではないようです。スレッド化とメッセージングに時間がかかっているようです。このサンプルがオーバーヘッドを発生させるために何をしているのかを誰かが指摘するのを手伝ってくれれば幸いです。
ありがとう、
ジム
更新1:私はもともとTilingView
定義のサンプルコードからのクラステクニックを使用していました
そして、それが違いを生むかどうかを確認する最初の試みとして、描画しまし- (void)drawRect:(CGRect)rect
たが、明示的なサブクラスに切り替えましたがCATiledLayer
、そうではなかったので、ここに投稿するためにコードをそのままにしました。[tiledLayer release];
TilingViewにもリークがありません。
objective-c - スケール変換と境界操作を使用した CATiledLayer のサイズ変更
ワークスペースが大幅に縮小されている場合に、何百もの画像に CATiledLayers を使用するとうまく機能するように、レイヤーでホストされたワークスペースが機能しています。すべての画像は低解像度の表現を使用しており、多数の画像をパンおよびズームするときのアプリケーションの応答性が大幅に向上しています。
ただし、私のアプリケーション内では、サイズ変更ハンドルを使用してレイヤーのサイズを変更する機能も提供しています。イメージ レイヤを CATiledLayers を使用するように変換する前に、サイズ変更デルタ (マウス ドラッグ) に従ってイメージ レイヤの境界を操作することでレイヤのサイズ変更を行っていましたが、うまくいきました。しかし、CATiledLayers が配置されたので、境界操作によるレイヤーのサイズ変更と、スケール変換によるワークスペースのズーム/ズーム解除を混在させると、CATiledLayers が混乱する原因になります。
具体的には、CATiledLayer のサイズを幅/高さのサイズの半分 (領域の 1/4) に変更すると、その中の画像が突然サイズ変更されたフレームの 1/2 に拡大され、フレームの 3/4 が空のままになります。これはまさに、内部の CATiledLayer ロジックが呼び出されて低解像度の画像表現を提供するときのようです。サイズ変更ハンドラーに触れず、ワークスペースをズーム/ズーム解除するだけで問題なく動作します。
ズーム/サイズ変更を CATiledLayers とうまく組み合わせる方法はありますか? または、レイヤーのサイズ変更ロジックを変換して、境界操作の代わりにスケール変換を使用する必要がありますか?
iphone - iPhoneとCAの飛行機間でCGPointを変換する
PDFを描画しているUIViewサブクラスがあります(CATiledLayerを使用)。また、そのPDFの特定の領域に描画する必要がありますが、CGを使用して描画するときのCATiledLayerの座標平面は非常に厄介です。
画像を参照してください:
上記の2番目の平面であるCATiledLayerの座標系に変換する必要があるポイント(200,200)があります。いくつかの変換でこれを試しましたが、何も機能しないようです。
ありがとう!