MrLujh / GuidePageManager

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

GuidePageManager

支持pod导入

  • pod 'GuidePageManager'

  • 执行pod search GuidePageManager提示搜索不到,可以执行以下命令更新本地search_index.json文件

rm ~/Library/Caches/CocoaPods/search_index.json
  • 如果pod search还是搜索不到,执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了

前言

  • 一款App在首次安装后打开时,会有3-5页的介绍界面引导新用户使用或者给用户更新提示。 根据引导页的目的、出发点不同,可以将其分为功能介绍类、使用说明类、推广类、问题解决类,一般引导页不会超过5页。 功能介绍类 功能介绍类引导页主要是对产品的主要功能进行展示,让用户对产品主功能有一个大致的了解。

创建方式 ----有两种思路

  • 通过版本号来判断是否第一次安装,self.window.rootViewController,来改变窗口的根控制器,代码如下:
// 获取当前的版本号
    NSString *currentVersion = [NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"];
    
    // 获取上一次的版本号
    NSString *lastVersion = [[NSUserDefaults standardUserDefaults] objectForKey:THVersionKey];
    
    if ([lastVersion floatValue] > 0) {
        
        [[UIApplication sharedApplication] setStatusBarHidden:NO];
        
        // 没有最新的版本号 创建tabBarVc
        TLTabBarViewController *tabBarVC = [[TLTabBarViewController alloc]init];
        self.tabBarVC = tabBarVC;
        [self showUnreadMessageHotView];
        self.window.rootViewController = tabBarVC;
        
    }else {
        
      
        TLGuidePageVC *vc = [[TLGuidePageVC alloc] init];

        self.window.rootViewController = vc;

        [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:THVersionKey];
        
    }
  • 在AppDelegate中,创建一个新的Window,把引导页的控制器设为新window的根控制器,代码如下:
 // 添加引导页
    NSArray *imageArray = [[NSArray alloc] init];
    if (BottomSafty == 0) {
        
        imageArray = @[@"guide_page_image_0",@"guide_page_image_1", @"guide_page_image_2", @"guide_page_image_3", @"guide_page_image_4"];
    }else {
        
        imageArray = @[@"guide_page_image_iphoex_0",@"guide_page_image_iphoex_1", @"guide_page_image_iphoex_2", @"guide_page_image_iphoex_3"];
    }
    
    // 体验 按钮
    CGRect ret;
    if (BottomSafty == 0) {
        
        ret = CGRectMake((KUIScreenWidth -140*kScaleW)/2.0, KUIScreenHeight -60*kScaleH, 140*kScaleW, 50);
    }else {
        
        ret = CGRectMake((KUIScreenWidth -140*kScaleW)/2.0, KUIScreenHeight -110*kScaleH, 140*kScaleW, 50);
    }
    
    [GuidePageManager shareManagerWithDelegate:self imageArray:imageArray startBtnFrame:ret isShowBtnBackgroundColor:NO];

创建方式 ----分析

  • 如果是采用AppDelegate中使用ViewController方式实现.那就需要用到切换rootViewController。

   * 利用代理或者block将rootViewController切换回TLTabBarViewController;

   * 利用这种方式有弊端,即:用户第一次安装的时候,如果没有走完引导页面,现在窗口的跟控制器还是引导页的控制,项目中所有的控制器都还没有创建,这时候进入后台,收到平台发送的通知,点击通知用户是无法跳转到对应的界面;

   * 这种情况其实很少出现,项目最好不要通过修改window的根控制器来做引导页。    

  • 通过创建一个新的Window,然后把引导页的控制设置为新Window的根控制器,降低了代码的耦合性,引导页功能独立。

使用    

  • pod 导入 GuidePageManager;

  • 引入头文件 #import "GuidePageManager.h"

  • AppDelegate 遵守协议

  • isShowBtnBackgroundColor:NO 传yes 会显示开始体验按钮的背景颜色,方便调整frame;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    
    [self selectRootController];
    
    // 显示小红点
    [self showUnreadMessageHotView];

    [self.window makeKeyAndVisible];
    
    return YES;
}

#pragma mark -设置根控制器

- (void)selectRootController
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    
    self.tabbar = [[TBTabBarController alloc] init];
    
    self.window.rootViewController = self.tabbar;
    
    self.window.backgroundColor = [UIColor whiteColor];
    
    
    // 添加引导页
    NSArray *imageArray = [[NSArray alloc] init];
    if (BottomSafty == 0) {
        
        imageArray = @[@"guide_page_image_0",@"guide_page_image_1", @"guide_page_image_2", @"guide_page_image_3", @"guide_page_image_4"];
    }else {
        
        imageArray = @[@"guide_page_image_iphoex_0",@"guide_page_image_iphoex_1", @"guide_page_image_iphoex_2", @"guide_page_image_iphoex_3"];
    }
    
    // 体验 按钮
    CGRect ret;
    if (BottomSafty == 0) {
        
        ret = CGRectMake((KUIScreenWidth -140*kScaleW)/2.0, KUIScreenHeight -60*kScaleH, 140*kScaleW, 50);
    }else {
        
        ret = CGRectMake((KUIScreenWidth -140*kScaleW)/2.0, KUIScreenHeight -110*kScaleH, 140*kScaleW, 50);
    }
    
    [GuidePageManager shareManagerWithDelegate:self imageArray:imageArray startBtnFrame:ret isShowBtnBackgroundColor:NO];
}

About

License:MIT License


Languages

Language:Objective-C 99.3%Language:Ruby 0.7%