私はこのアプリケーションを持っています。このアプリケーションには、ユーザーが画面上で簡単な絵を描くことができるセクションが含まれています。私の考えは、2種類の絵を提供することです:粗いと滑らかな(ベジェ)ライン。iPhone - drawRectを見つけようとしています:
どのようにビルドされていますか:私はカスタムdrawRectメソッドを持つ透明なUIViewを持っています。私はdrawRectを完全に理解しているかどうかはわかりませんが、コードは部分的に動作しています。
動作方法:ユーザーが画面上で指を動かします。彼が最初に画面に触れると、TouchesBeganはmyPointsというmutable配列を作成し、最初の点の座標を保存してキャンバスをそのまま保存します(元に戻すことができます)。
その後、TouchesMovedルーチンはすべてのポイントを取得し、myPointsに追加します。この配列は、ユーザーがベジェ線を描くことを選択した場合に必要です。
「touchesEnded」が検出されたとき、アプリはユーザーが通常の線(ラフ)またはベジェをペイントしているかどうかを確認する必要があります。それがベジエでない場合、線は既に描画されています。ベジェが必要な場合は、キャンバスを消去し、TouchesBeganが保存したときと同じようにキャンバスを復元し、新しいベジェ近似を計算して(描画された点に合わせて最適なベジェ曲線になるようにリバースエンジニアリング)大まかなものを置き換える。
これらは私の問題です。
1)元に戻す方法は?私は最初にアンドゥを保存する新しいレイヤーを作成することを考えましたが、それを行うことでアプリのメモリ使用量が8から13Mbに増加しました...これが安全なレベルであればわかりません(このアプリケーションは3GS、iPod Touch 2nd G、Up、iPadを含む)次に、キャンバスを保存するためのキュー操作を開始することにしました。これは、空のイメージが保存される結果となっています(drawRect以外のコンテキストを取得できないため、保存メソッドがコンテキストに対してnilを取得しているとします)。
2)2番目の問題は最初の問題と似ています。この時点で、キャンバスを保存したときの状態にキャンバスを復元する必要がありますが、復元メソッドがdrawRectの外側にあるので、コンテキストにもそれがなくなります。
TouchesBegan、TouchesMovedおよびTouchesEndedおよびすべてのメソッドは、drawRectがあるのと同じクラスの中にあり、viewControllerではありません。
私の質問は:あなたはどうやってそれをやるのですか?
私は、マルチレベルの取り消しを提供する店舗で絵画アプリを見ました。私は彼らがどうしたのか想像することはできません。私の最初の試みでは、私が創造した層のために5メガバイトのメモリを消費していたので、そのような種類のアンドゥをすることは不可能です。私は絶望的です!
ありがとうございました
をUAのリンクを提供します(はい、キャンバスで私は画像を意味する)...これで問題が消しゴムです。ユーザーはオブジェクトの一部を指で消去することができます。ユーザーが行の一部(既に保存されている点)を消去すると、消去を再作成する必要があります。これは愚かではないでしょうか?最終的な画像が得られるまで、オブジェクトは完全にまたは部分的に繰り返し描画され、消去される。私はこれが最良の選択肢とは思わない。 – SpaceDog
実際には、消去は、コレクション内の別の描画オブジェクトですが、背景色を使用しています(多分違うかもしれません)...あなたが何かを元に戻す(つまり、最後のエントリを取り除く)とき、コレクションからイメージを再作成する必要がありますopeationsはSimone可視画像 – Jaime
に残っています上記のタイプミスについては申し訳ありません...私のIpadは私の上でトリックを演奏しています....私はコンセプトサンプル証拠へのリンクで答えを更新しました – Jaime