ペイントアプリのredo/undoでのジレンマ。

今回はただの独り言だったり。

redo/undoが上手く動作するようになりました。

喜びたいところなのですが、まだ問題がありました。

問題はメモリへの圧迫、といったところですね。

 

私が今回書いたコードでは、線をひとつずつ保存して、undoボタンを押したら一番最後の線を消し、最初から再描画し直すという仕組みになっています。(1)

もうひとつ一度は試したけれどやめた方法があります。線を描いた直後に画像を保存し、undoボタンを押したらその画像に戻す、という方法です。(2)

 

前者の方法では、スケッチをしている際のメモリへの圧迫は少ないです。後者では線を書き足していけばいくだけメモリを圧迫します。

 

一見私のコードが正解だったようにみえましたが、結果はムムムといった感じです。

1の方法で実際に絵を描いてみました。線が増えれば増えるほど、undo時に再描画にかかる時間はたくさんかかります。メモリへの負荷がかかるのが再描画時のみ。普通に書いている場合はそこまで負荷はかかっていません。

しかし線が大量にある場合にundoボタンを押すと処理にめちゃくちゃ時間がかかります。連続で押したときはそのままサヨナラです。アプリ自体が落ちてしまいます。

 

2の方法であれば線の数によってどんどん画像を保存していくのでメモリはどんどん負荷がかかっていきます。

 

しかし実際に使えるのは2の方法な気がします。

すべての線を保存して、どこまでもundoできるようにしよう!というのがまぁ無理な話なんでしょうね。

いろいろなペイントアプリがありますが、やはりundoの回数には限度があります。そういった事情からなのかーといった感じ。

 

めちゃくちゃ悩んでやっと1の方法のundo機能をつけましたが、やはり2の方法にしたほうが良さそうですね。メモリへの負荷を考えて1の方法にしたはずなのになぁ(笑)

アプリが落ちてしまってはどうしようもないですしね。頑張って書き直します・・・・。

 

それではでは

 

iOS
コメントは認証制です。詳しくは下記の注意をお読みください。お気軽にコメントお願いします!

Write a Comment

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

Related Memo...

UITableView.RowAnimation の .none はアニメーションするよ

UITableView.RowAnimation の .none はアニメーションがnoneなわけじゃなく、デフォルトの設定を使うよという意味らしい。

The inserted or deleted rows use the default animations.

なのでアニメーションしちゃう。今更の気づき。

 

iOS

UINavigationController + UIScrollView の組み合わせで使っている時に謎の余白ができる時

UINavigationController + UIScrollView の組み合わせで使っていて、UIScrollView 上に AutoLayout で上下左右0で View を設置しているのに、30px程度上にずれてしまうとき。

`navigationController.navigationBar.isTranslucent = false` にすると直るかもしれない。

ScrollView上のコンテンツとNavigationBarの重なっているところが透過していたら多分これで直せるはず。

通常のターゲットではちゃんと動いているのに、iOSSnapshotTestCase を用いたテストでだけこの対応が必要なのよくわからないけれど。。。

iOS

記事を書くほどでもないけれどメモっておきたいこと

テスト投稿。

例えばiphone7 の画面サイズ

750 × 1334
半分375 × 667

iOS
more