標籤:http io os java ar for art cti on
在工程中添加Undo、Redo的按鈕圖片,每個按鈕都有可用和不可用兩種狀態圖片,共4個圖片。
在StoryBoard中添加兩個按鈕,設定圖片屬性和自動布局約束。
按住 Ctrl 拖動按鈕到 ViewController.mm 中,建立屬性變數和動作方法。
@interface ViewController ()@property (weak, nonatomic) IBOutlet UIButton *undoButton;@property (weak, nonatomic) IBOutlet UIButton *redoButton;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad];}- (IBAction)undo:(id)sender {}- (IBAction)redo:(id)sender {}@end
在 ViewController.mm 中匯入 GiViewHelper.h,在 viewDidLoad 中啟用Undo功能,實現Undo/Redo按鈕方法:
- (void)viewDidLoad { [super viewDidLoad]; NSString *path = [LIBRARY_FOLDER stringByAppendingString:@"undo"]; [[GiViewHelper sharedInstance]startUndoRecord:path];}- (IBAction)undo:(id)sender { [[GiViewHelper sharedInstance]undo];}- (IBAction)redo:(id)sender { [[GiViewHelper sharedInstance]undo];} 運行程式,畫幾個圖,試試Undo/Redo按鈕吧。雖然能工作了,但按鈕可用狀態未顯示出來。
在 ViewController 中實現 GiPaintViewDelegate 觀察者協議的 onContentChanged: 方法,註冊此觀察者。
@interface ViewController ()<GiPaintViewDelegate>...- (void)viewDidLoad { [super viewDidLoad]; ... GiViewHelper *hlp = [GiViewHelper sharedInstance]; [hlp startUndoRecord:[LIBRARY_FOLDER stringByAppendingString:@"undo"]]; [hlp addDelegate:self]; [self onContentChanged:hlp.view];}- (void)onContentChanged:(id)view { GiViewHelper *hlp = [GiViewHelper sharedInstance]; self.undoButton.enabled = [hlp canUndo]; self.redoButton.enabled = [hlp canRedo];}
範例代碼見 GitHub 或 OSC,歡迎 Fork。
iOS繪圖例2:增加Undo/Redo功能