2012-02-13 6 views
0

私はこのアプリを使って矩形、日食、円、テキストなどの基本図形を描くことができます。 フリーフォームの描画も許可されていますキャンバス上のポイントオブポイント。iOS:能率的な(パフォーマンス上の)描画アプリケーションの開発に入力が必要

また、オブジェクトを選択したときに表示される選択ハンドルを操作することで、ユーザーはこれらのオブジェクトのサイズを変更して移動することができます。 さらに、ユーザーはキャンバスをズームしてパンすることができるはずです。

この描画機能を効率的に実装する方法については、いくつかの入力が必要です。 私は心の中で物事を以下している -

  1. 利用のUIViewのInvalidateRectとのdrawRect

はメインキャンバスのため、各挿入されたオブジェクトのためのUIViewを持っている - correspoding RECTを無効とすることを交差するすべてのオブジェクトを再描画しますUIViewのdrawRect関数のrect

  1. UIViewを使用してCALayerを使用しますか? CALayerについて言及している人はいなくても、私はこれについて多くのアイデアを持っていません。 画像を抽出し、形状を描き、基本的には、UIGraphicsBeginImageContextを使用して、新しいCGContextを作成し、オフスクリーンCGContextにオブジェクトを描画します)https://developer.apple.com/library/ios/#qa/qa1708/_index.html

  2. をキャンバスとしてUIImageViewを持っており、それぞれのオブジェクトを描画するとき、私たちは私がこれ を行う、などのこのCGコンテキストから抜け出し、それをUIImageViewのイメージプロパティのソースとして使用しますが、ここでUIImageViewの一部だけを無効にして、その領域のみを更新します。

どうすればよいアプローチがお勧めですか? これを行うための他の効率的な方法はありますか?

ありがとうございました。

答えて

1

UIImageを使用すると、複数のオブジェクトを描画する方が効率的です。しかし、CALayerを使用すると、他のオブジェクトを変更する必要がないため、単一のオブジェクトを移動して変更すると効率的です。だから私は最良のアプローチは、UIImageを一般的な描画に使用し、CALayerを変更する形状に使用することだと思います。言い換えれば:

  • 追加または変更された図形を描画するためにCALayerのを使用していますが、他の形状

しかし、OpenGLを描くためにUIImageを使用してUIImage

  • 上でそれを描画しません依然として最も効率的なソリューションですが、あまりにも多くのオブジェクトを描画する必要がない場合は、それを気にしないでください。

  • +0

    ありがとうございました。「CALayerを使用してシェイプを追加または変更する」と言うと、各オブジェクトにレイヤーを追加することを意味しますか?またはすべてのオブジェクトのキャンバスとして機能する単一のレイヤーがありますか?それが後であれば、私はオブジェクトを移動する必要があると言うことができる、私は現在の境界をクリアし、新しい境界rtでオブジェクトを再描画する必要がありますか?私はそれが効率的な方法であると仮定しています。また、私はキャンバスの背景を持っています、それは独自のRTのレイヤーになるだろうので、水平線のセットを言うことができますか? iOSはこれらの層を堆肥化して最終的な視野に入るでしょうか? – naiveCoder

    +1

    すべての図形を含む配列があるとします。あなたの背景をレイヤーに描画します。レイヤーoldShapesで現在変更されているシェイプ以外のシェイプをすべて描画します。別のレイヤーcurrentShapeに追加または変更されているシェイプを描画します。この方法で、oldShapesレイヤーを数回だけ再描画します。また、ユーザーが図形を変更しているときは、その図形のみを処理する必要があります。たとえば、シェイプを移動したい場合は、レイヤーを単純に移動するか、シェイプを新しい座標に再描画します。 – sch

    +0

    キャンバスが画面サイズを越えて広がっていて、キャンバスの高さが3000ptと言うことができるので、キャンバスをパン、ズームイン/アウトする方法を提供する必要があります。 – naiveCoder

    1

    ポリゴンを描画する場合は、Quartzフレームワークを使用し、CALayerに基づく描画方法を使用する必要があります。 CALayersをどのビューに表示するかは重要ではありません。UIImageViewまたはUIViewです。私はUIViewと言うでしょう。UIImageViewさんは、描画のためのプロパティやメソッドは必要ありません。

    関連する問題