首页 > 代码库 > iOS绘图例2:增加Undo/Redo功能
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]; }
样例代码见 GitHub 或 OSC,欢迎 Fork。
iOS绘图例2:增加Undo/Redo功能
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。