iOS首次启动用户引导

三月 02, 2016

继续阅读

       作为一个开发者,我们必须要考虑当用户下载过我们的应用户是否能正确使用。当然,大部分第一次使用时都不可能完全知道如何进行操作。这时,我们就要考虑是否要添加一个简短的教程来提示用户如何使用。然而,这个教程通常情况下只需要显示一次就够了,所以我们只让第一次启动显示。
       需求时分析好了,可是,要怎么实现呢?在iOS上能够实现数据持久化的也就几种:NSUserDefault、plist文件、SQLite、对象归档和Core Data。我个人认为最简单的就是NSUserDefault了,这里也就以NSUserDefault为例。

代码实现

       首先,当第一次启动时,使用UIScrowView做一个三个屏幕宽度的滑动区域,可以通过左右滑动进行切换,党话到最后一屏时,会出现一个按钮跳过引导 当点击按钮后进入应用的正常界面。以后再次启动时,直接进入应用的主界面,不再显示之前的引导步骤。

AppDelegate.m
//AppDelegate中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //拿到当前用户的窗口
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    //将窗口设置为可见
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    //判断是否是第一次启动
    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]) {
        //如果是第一次启动,这只键值对 `firstLaunch:YES`
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstLaunch"];
        //创建FirstLaunchController并将窗口的根视图控制器设置为FirstLaunchController
        FirstLaunchController *fvc  = [[FirstLaunchController alloc] init];
        self.window.rootViewController = fvc;
    }else{
        //不是第一次启动,直接进入应用程序,跳过引导
        ViewController *fvc  = [[ViewController alloc] init];
        self.window.rootViewController = fvc;
    }
    return YES;
}
FirstLaunchController.m
@implementation FirstLaunchController

- (void)viewDidLoad {
    [super viewDidLoad];
    //FirstLaunchController中添加UIScrowView
    _sv = [[UIScrollView alloc] init];
    //UIScrowView设置为可滑动
    _sv.pagingEnabled = YES;
    //设置UIScrowView的可视大小
    _sv.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
    //设置UIScrowView的大小
    [_sv setContentSize:(CGSize){self.view.bounds.size.width*3, self.view.bounds.size.height}];
    _sv.backgroundColor = [UIColor whiteColor];

    //添加三个UIView到UIScrowView中
    UIView *cellView1 = [[UIView alloc] initWithFrame:_sv.frame];
    [cellView1 setBackgroundColor:[UIColor redColor]];
    UIView *cellView2 = [[UIView alloc] initWithFrame:CGRectMake(_sv.frame.size.width, 0, _sv.frame.size.width, _sv.frame.size.height)];
    [cellView2 setBackgroundColor:[UIColor grayColor]];

    //使按钮位于屏幕正中央
    UIButton *bt = [[UIButton alloc] initWithFrame:CGRectMake((self.view.bounds.size.width-100)/2, (self.view.bounds.size.height-50)/2, 100, 50)];
    [bt setTitle:@"跳过引导" forState:UIControlStateNormal];
    [bt setBackgroundColor:[UIColor grayColor]];
    //为按钮绑定changeView方法
    [bt addTarget:self action:@selector(changeView) forControlEvents:UIControlEventTouchUpInside];
    UIView *cellView3 = [[UIView alloc] initWithFrame:CGRectMake(_sv.frame.size.width*2, 0, _sv.frame.size.width, _sv.frame.size.height)];
    [cellView3 addSubview:bt];
    [cellView3 setBackgroundColor:[UIColor blackColor]];

    [_sv addSubview:cellView1];
    [_sv addSubview:cellView2];
    [_sv addSubview:cellView3];

    //是否显示(水平/垂直)滑动条
    _sv.showsHorizontalScrollIndicator = YES;
    _sv.showsVerticalScrollIndicator = NO;
    //ScrollView的位置
    _sv.contentOffset = CGPointMake(0, 0);
    [self.view addSubview:_sv];
    _sv.delegate = self;
}

/** 
 跳过引导
 */
- (IBAction)changeView {
    UIWindow *window = self.view.window;
    ViewController *main = [[ViewController alloc] init];
    window.rootViewController = main;
}
@end

       就这么简单,这样一个用户引导就做好了,如果加上动画效果、配上git图片效果就更棒了!

       OC版仓库 ->GitHub

Terry