「手描きツール」を実装しようとしています。現時点では、algorythmはそのように見えます(メソッドが非常に大きいため、コードを挿入しません。アイデアを説明しようとします):
描く
- touchesStarted :メソッドで、NSMutableArray * pointsArrayを作成 し、それにポイントを追加します。setNeedsDisplay:メソッドを呼び出します。
- touchesMoved:メソッドでは、pointsArrayから最後に追加されたポイントと現在のポイントの間のポイントを計算します。すべてのポイントをpointsArrayに追加します。setNeedsDisplay:メソッドを呼び出します。
- touchesFinished :イベントでは、配列から最後に追加されたポイントと現在のポイントの間のポイントを計算します。フラグtouchesWereFinishedを設定します。setNeedsDisplayを呼び出します。
与える:
drawRect:メソッドチェックはpointsArray!= nilであり、データが含まれています。ある場合は、この配列の各ポイントで円をトラウトし始めます。フラグtouchesWereFinishedが設定されている場合-現在のコンテキストをUIImageに保存し、pointsArrayを解放し、nilに設定して、フラグをリセットします。
この方法には多くの欠点があります。
- 遅い
- ユーザーが長時間指を触れたり動かしたりすると、非常に遅くなります。アレイが巨大になります
- 円で構成された「線」は醜い
アルゴリズムを変更して、少し速く、線を滑らかにしたいと思います。結果として、次のURLの写真のような行が必要です(申し訳ありませんが、画像を挿入するのに十分な評判がありません):http: //2.bp.blogspot.com/_r5VzEAUYXJ4/SrOYp8tJCPI/AAAAAAAAAMw/ZwDKXiHlhV0/s320/SketchBook + Mobile(4).png
アドバイスしてもらえますか?この方法で線を引くことができますか(エッジが滑らかでスリムです)?(線を滑らかにするために)エッジにアルファグラデーションの円を描くことを考えましたが、それは非常にゆっくりと私見になります。
手伝ってくれてありがとう
アップデート
描画アルゴリズムを変更しました。これで、すべてのイベントでUITouchを保存し、drawRect:メソッドで前からパスを描画します。現在のものを指します。そして、すべてのdrawRect:呼び出しでコンテキストからUIImageをダンプします。
しかし、まだ2つの質問があります。
- よりスムーズに描くことは可能ですか?つまり、非常に速く描画すると、パスパスが直線のセットであることが簡単にわかります。しかし、パスをスムーズにするために、曲線を描きたいと思います。おそらくベジェ曲線が役立つでしょうが、私はそれらがこれにどのように役立つのか理解していません。状況。
- パスを細い線で始めて、細い線で終わらせたいです。この線変換を行うにはどうすればよいですか?ありがとう!