iOS绘图例2:增加Undo/Redo功能
在工程中添加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]; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。