が必要となり私のように制御iOS、描画またはsubview?
-
20-12-2019 - |
質問
いを創出の取り組みを開始し、私のように制御iOSマアプリです。しに必要なものはタイムラインのイベント。基本的にはバンチの長方形、ライン/アークの一部装飾の可能性のタッチポイントは編集ます。でいることがあり、基本的には、"フル画面"制御?
私は二つの基本経路の実用化カスタムUIViewのサブクラス:
単に実施
drawRect:
や街へ出かけ用CoreGraphics
ます。が分っ民間の方法なのです。るキャッシュの情報を必要に応じて、任意のサブ地域でのヒット検出を行います。ではなく"描く"グラフィックを追加して、バンチのUIViews子として使用
addSubview:
操作自layer
物件ていないのが異なることが知られているグラフィック作品、bounds\frame
において位置付けに。けましょう"drawing"のそのものです。
一経路による。しあうものだが、きっかけになるかもしれないと思を求める知恵は人だった。
私 guess であることを より早く いを行ってみてはいかがでしょう drawRect:
ルートのsubview的なアプローチを必要とするコードがもれるり(くのヒット検出、アニメーション支援、自動クリッピングを管理します。したいと思いるのを実行することができ ピンチ操作でさらに拡大 います。
更新
行ったの UICollectionView
ます。るっ選択スクロールのための無料(その後の驚き).私は写しの結果です。
解決
Coregraphicsで行くのは、uiviewを使ってビルディングするよりも多くのコードラインを書くことができますが、メモリ上でより優れています。ただし、そのコンテンツのすべてを管理するためのより堅牢なソリューションが必要になる可能性があります。UICollectionView
は、カスタムUICollectionViewCell
サブクラスを使用してデータをビューにマッピングするための適切な解決策のようです。これはあなた自身を転動するよりも発展するのがはるかに早くなるでしょうが、UICollectionViewLayout
サブクラスを通して大きな柔軟性が付いています。ズームからズームへのピンチは箱の外にはサポートされていませんが、 をする方法。セルの再利用のために束の束を使用するよりもメモリが優れていますが、リロードはすべて異なるサイズを計算する数百項で遅くなる可能性があります。
他のヒント
パフォーマンスに関しては、特に多くの登録を潜在的にレンダリングする必要がある場合は、慎重に書かれたdrawRect:
が好ましい。ビューを使用すると、レイアウトシステム全体が機能し、レイアウトシステム全体が町に移動してパフォーマンスを強制終了した場合は、動作します。私は最近、パフォーマンス上の理由から、ビューベースからCG-SAに基づいてカレンダービューをアップグレードしました。
他のすべての側面では、ビューを使って作業することがはるかに好ましいです。 Interface Builder、Easy Gesture認識機能設定、OOなどは、各要素の論理クラスを作成し、現在のコンテキストに描画することができます(コンテキストリファレンスを渡して、それを描画するのに最適)、まだ簡単ではありません。
新しいデバイスでは、ビュー描画性能は実際には非常に高いです。しかし、これらのiPhone 4と4つのデバイスが必要な場合は、GPUのパフォーマンスではかなり多くのことがありません。グラフの潜在的なサイズに応じて、CGの方法に行く必要があるかもしれません。
今、あなたはズームに挟まれます。これは何をしても雌犬です。 drawRect:
をよく書いている場合は、最終的にタイリングしてそれを取り扱う方法を取り組むことができます。
あなたがユーザーにチャートの一部を移動させることを計画しているならば、私は間違いなく見方をすることを提案します。
FYI、あなたはまさに細かい細かいでズームするためにピンチを扱うことができるでしょう。
この場合、UVIEWの使用をどのようにプッシュするか、チャートの部分のドラッグ、チャート内の遷移のアニメーション化、およびチャート内の要素をタップすることです(それは引き出しには難しくありません:)。また、チャート内の要素が必要な場合は、CPU使用率が重い場合があります。要素のレンダリングがレイヤーにキャッシュされて以来、チャートのサブ部分をuiviewに再描画する必要がある場合は、パフォーマンスが向上します。あなたが気にする部分を再描画するために、チャート全体ではありません。
チャートが非常に大きく、DrawRectを使用したい場合:おそらくCatileLayerを使用して、レイヤー全体をメモリ内に持たないようにするためにCatileLayerを使用します。これにより、要求されたタイルをレンダリングしたいだけでなく、エリア全体ではなく追加の課題を追加できます。