画像やラベルに対してのRedo Undo機能を考えてみる4
ボタンを押した時の処理
ここまでボタンを押すまでの処理を書いていきました。
ここから実際の動きを作っていきます。
まずはボタンの中身から
redoボタン(進むボタン)はまず_redoundoIndexを1増やしてからupdateViewを
呼び出しています。これは格納していた場所の1つ先を再現するという事になります。
進むボタンを押したのでundo(戻る)ボタンは必ずYESで。
redoボタンの方は_containerStockの数と一緒ならばもう保存している画像が無いので
NO。それ以外の場合はYESが押せるようになっています。
undoボタンも原理は一緒です。最初に--で1引いておく事により1つ戻る事を実現しています。
_redoundoIndexが1だと押せないのは最初にまっさらな画像として登録しているものを1として記録しているからそれ以上戻れないようにです。
こちらが [self updetaView]で呼び出しているメソッド
と、ここまでが現在実現できているポイントです。
ここからがまだ勉強不足や経験不足で未実装の機能になります。
未実装
・何かを生成した際にそれ以上先があるとゴミや動作がおかしくなる原因なので
生成した際に_containerStockの現在値以上を配列から削除する。
・画像などをジェスチャーで移動させた際に呼び出す画像を参照しているメモリが
一緒になってしまっている。
例 貼付けた画像Aをピンチジェスチャーで拡大するとそれ以降の画像B,Cなど
すべてその大きさになってしまっている。(拡大前の画像も同じ物をメモリから 参照しているため拡大されたまま)
この問題については画像Aをジェスチャーで動かす前と動かした後でcopy
そして別の物としてメモリに認識させる・・・と理屈は分かったんですが
いかんせんやり方が拙くていまだ実装できず・・・
そしてこれ以外にも出てくると思いますしこの機能をつけて修正していくと
まだまだundoRedo機能実装まではかかりそうです・・・。