基于AOP的iOS用户操作引导框架设计

本文介绍了如何设计一个基于AOP的iOS用户操作引导框架,包括描述用户引导步骤的类、遮盖层视图设计、调度器的设计等方面。利用KeyPath获取私有控件,通过Method Swizzling拦截页面切换进行引导步骤推进。文章详细阐述了各个关键部分的实现细节,实现了无侵入式的用户引导功能。
摘要由CSDN通过智能技术生成

背景

有一种现象,App设计者觉得理所当然的操作方式,却常常被用户所忽视,为了防止这种现象发生,就要为App设计一个帮助,一种低成本的方案是将帮助文档写成HTML然后展示给用户,这样的方式常常不能带来好的效果,一种较好的方式是高亮用户应该点击的区域,对其他部分进行遮盖,并用说明文字提醒用户,如下图所示。点击这里观看动画演示

下载

框架SGUserGuide已经上传到github,点击前去github下载,欢迎Star!

关键

要实现这种引导,关键问题有二,一是如何拿到允许交互的控件,二是如何处理引导步骤的推进关系。
对于第一个问题,可以通过keyPath解决,keyPath的强大之处在于可以用点语法拿到更深层的私有,例如我们的ViewController有一个私有属性topView,而topView又有私有属性topButton,那么我们使用topView.topButton即可从ViewController中拿到控件topButton而丝毫不破坏其封装性。
对于第二个问题,可以通过AOP编程解决。我们知道大部分的交互都涉及页面切换,例如上图点击按钮后进入编辑页面,因此页面的切换可以作为一个“切面”,我们通过这个切面来处理大部分的引导步骤推进。我们可以通过Method Swizzling来拦截所有的viewWillAppear:方法,并处理引导步骤的判断与推进,需要注意的是还有一些不涉及页面切换的引导步骤,则需要在适当的地方手动推进。

实现

描述用户引导步骤的类的设计

为了描述一个引导步骤,首先要判断当前页面是否应该被引导,通过ViewController的类型来判断;其次需要的是可交互控件,通过keyPath来寻找;除此之外,还需要对用户的提示信息,这个类的具体设计如下:

@interface SGGuideNode : NSObject

@property (nonatomic, assign) Class controllerClass;
@property (nonatomic, strong) NSString *permitViewPath;
@property (nonatomic, copy) NSString *message;
@property (nonatomic, assign) BOOL reverse;

+ (instancetype)nodeWithController:(Class)controller permitViewPath:(NSString *)permitViewPath message:(NSString *)message reverse:(BOOL)reverse;
+ (instancetype)endNodeWithController:(Class)controller;

@end

其中reverse是一个用于反转遮盖与可交互控件的属性,用于类似于“进行一项除去退出以外的操作”的情景。
通过两个类方法可快速的创建一个步

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值