Full Code of sunjinshuai/KeepGuidePage for AI

master 81a075ed25ee cached
91 files
109.9 KB
37.5k tokens
1 requests
Download .txt
Repository: sunjinshuai/KeepGuidePage
Branch: master
Commit: 81a075ed25ee
Files: 91
Total size: 109.9 KB

Directory structure:
gitextract_3whcw96j/

├── .gitignore
├── .travis.yml
├── KeepGuidePage/
│   ├── Account(账号)/
│   │   └── Controller/
│   │       ├── LoginViewController.h
│   │       ├── LoginViewController.m
│   │       ├── RegisterViewController.h
│   │       └── RegisterViewController.m
│   ├── AppDelegate.h
│   ├── AppDelegate.m
│   ├── Find(发现)/
│   │   └── Controller/
│   │       ├── KeepFindViewController.h
│   │       └── KeepFindViewController.m
│   ├── Follow(关注)/
│   │   └── Controller/
│   │       ├── KeepFollowViewController.h
│   │       └── KeepFollowViewController.m
│   ├── Images.xcassets/
│   │   ├── 3DTouch/
│   │   │   ├── .svn/
│   │   │   │   ├── all-wcprops
│   │   │   │   ├── entries
│   │   │   │   └── text-base/
│   │   │   │       └── Contents.json.svn-base
│   │   │   ├── Contents.json
│   │   │   ├── fx_3DTouch_AdorableStar.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── fx_3DTouch_Receipt_of_goods.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── fx_3DTouch_Search_brand.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── fx_3DTouch_Star_Ticket.imageset/
│   │   │       └── Contents.json
│   │   ├── Account/
│   │   │   ├── Contents.json
│   │   │   ├── qq.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── qq_light.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── wechat.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── wechat_light.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── weico.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── weico_light.imageset/
│   │   │       └── Contents.json
│   │   ├── AppIcon.appiconset/
│   │   │   └── Contents.json
│   │   ├── Brand Assets.launchimage/
│   │   │   └── Contents.json
│   │   ├── Contents.json
│   │   ├── Find/
│   │   │   ├── Contents.json
│   │   │   ├── discovery.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── discovery_on.imageset/
│   │   │       └── Contents.json
│   │   ├── Follow/
│   │   │   ├── Contents.json
│   │   │   ├── trends.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── trends_on.imageset/
│   │   │       └── Contents.json
│   │   ├── Navigation/
│   │   │   ├── Contents.json
│   │   │   ├── back.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── backbtn.imageset/
│   │   │       └── Contents.json
│   │   ├── NewFeature/
│   │   │   ├── Contents.json
│   │   │   └── keep.imageset/
│   │   │       └── Contents.json
│   │   ├── PersonalCenter/
│   │   │   ├── Contents.json
│   │   │   ├── personal.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── personal_on.imageset/
│   │   │       └── Contents.json
│   │   └── Train/
│   │       ├── Contents.json
│   │       ├── train.imageset/
│   │       │   └── Contents.json
│   │       └── train_on.imageset/
│   │           └── Contents.json
│   ├── Info.plist
│   ├── Main(主要)/
│   │   └── Controller/
│   │       ├── KeepNavigationViewController.h
│   │       ├── KeepNavigationViewController.m
│   │       ├── KeepNewFeatureViewController.h
│   │       ├── KeepNewFeatureViewController.m
│   │       ├── KeepTabBarViewController.h
│   │       └── KeepTabBarViewController.m
│   ├── NewFeatrue(新特性)/
│   │   └── View/
│   │       ├── KeepAdLabel.h
│   │       ├── KeepAdLabel.m
│   │       ├── KeepAdScrollView.h
│   │       ├── KeepAdScrollView.m
│   │       ├── KeepNewFeatrueView.h
│   │       └── KeepNewFeatrueView.m
│   ├── PersonalCenter(个人中心)/
│   │   └── Controller/
│   │       ├── KeepPersonalViewController.h
│   │       └── KeepPersonalViewController.m
│   ├── Public(公共库)/
│   │   ├── Category/
│   │   │   ├── NSString+Extension.h
│   │   │   ├── NSString+Extension.m
│   │   │   ├── UIBarButtonItem+Extension.h
│   │   │   ├── UIBarButtonItem+Extension.m
│   │   │   ├── UIColor+Extension.h
│   │   │   ├── UIColor+Extension.m
│   │   │   ├── UILabel+Extension.h
│   │   │   ├── UILabel+Extension.m
│   │   │   ├── UIView+Extension.h
│   │   │   └── UIView+Extension.m
│   │   ├── CustomView/
│   │   │   ├── KeepCancelHighlightButton.h
│   │   │   └── KeepCancelHighlightButton.m
│   │   ├── MYCollectionViewStreamLineFlowLayout/
│   │   │   ├── MYCollectionViewStreamLineFlowLayout.h
│   │   │   ├── MYCollectionViewStreamLineFlowLayout.m
│   │   │   ├── MYGroupIssueLabelCell.h
│   │   │   └── MYGroupIssueLabelCell.m
│   │   └── Other/
│   │       ├── Constant.h
│   │       └── Constant.m
│   ├── Train(训练)/
│   │   └── Controller/
│   │       ├── KeepTrainViewController.h
│   │       └── KeepTrainViewController.m
│   └── main.m
├── KeepGuidePage.xcodeproj/
│   ├── project.pbxproj
│   ├── project.xcworkspace/
│   │   └── contents.xcworkspacedata
│   └── xcshareddata/
│       └── xcschemes/
│           └── KeepGuidePage.xcscheme
├── KeepGuidePageTests/
│   ├── Info.plist
│   └── KeepGuidePageTests.m
├── KeepGuidePageUITests/
│   ├── Info.plist
│   └── KeepGuidePageUITests.m
└── README.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## Build generated
build/
DerivedData/

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/
.DS_Store 
*/.DS_Store 

## Other
*.moved-aside
*.xccheckout
*.xcscmblueprint

## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build

# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control

fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output

# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode

iOSInjectionProject/


================================================
FILE: .travis.yml
================================================
osx_image: xcode9
language: objective-c

env:
  global:
    - LANG=en_US.UTF-8
    - LC_ALL=en_US.UTF-8
    - XCODE_PROJECT=Keep/KeepGuidePage.xcodeproj
  matrix:
    - SCHEME="KeepGuidePage"
    
after_success:
  - sleep 5


================================================
FILE: KeepGuidePage/Account(账号)/Controller/LoginViewController.h
================================================
//
//  LoginViewController.h
//  KeepGuidePage
//
//  Created by Michael on 16/7/29.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface LoginViewController : UIViewController

@end


================================================
FILE: KeepGuidePage/Account(账号)/Controller/LoginViewController.m
================================================
//
//  LoginViewController.m
//  KeepGuidePage
//
//  Created by Michael on 16/7/29.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "LoginViewController.h"
#import "Constant.h"

@interface LoginViewController ()

@end

@implementation LoginViewController

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = KeepNavigationThemeColor;
    self.title = @"登录";
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end


================================================
FILE: KeepGuidePage/Account(账号)/Controller/RegisterViewController.h
================================================
//
//  RegisterViewController.h
//  KeepGuidePage
//
//  Created by Michael on 16/7/29.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface RegisterViewController : UIViewController

@end


================================================
FILE: KeepGuidePage/Account(账号)/Controller/RegisterViewController.m
================================================
//
//  RegisterViewController.m
//  KeepGuidePage
//
//  Created by Michael on 16/7/29.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "RegisterViewController.h"
#import "Constant.h"

@interface RegisterViewController ()

@end

@implementation RegisterViewController

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = KeepNavigationThemeColor;
    self.title = @"注册";
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end


================================================
FILE: KeepGuidePage/AppDelegate.h
================================================
//
//  AppDelegate.h
//  KeepGuidePage
//
//  Created by Michael on 16/6/30.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;


@end



================================================
FILE: KeepGuidePage/AppDelegate.m
================================================
//
//  AppDelegate.m
//  KeepGuidePage
//
//  Created by Michael on 16/6/30.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "AppDelegate.h"
#import "KeepTabBarViewController.h"
#import "KeepNewFeatureViewController.h"
#import "KeepNavigationViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    // 创建窗口
    self.window = [[UIWindow alloc] init];
    self.window.frame = [UIScreen mainScreen].bounds;
    self.window.backgroundColor = [UIColor blackColor];
    [self.window makeKeyAndVisible];
//    self.window.rootViewController = [[KeepTabBarViewController alloc] init];
    if ([[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"] isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"CFBundleVersion"]]) {
    } else {
        KeepNewFeatureViewController *feature = [[KeepNewFeatureViewController alloc] init];
        KeepNavigationViewController *navigation = [[KeepNavigationViewController alloc] initWithRootViewController:feature];
        self.window.rootViewController = navigation;
    }
    [self setup3DTouch];
    return YES;
}

- (void)setup3DTouch
{
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"fx_3DTouch_AdorableStar"];
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"fx_3DTouch_Search_brand"];
    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"fx_3DTouch_Receipt_of_goods"];
    UIApplicationShortcutIcon *icon4 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"fx_3DTouch_Star_Ticket"];
    
    UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc]initWithType:@"com.51fanxing.adorableStar" localizedTitle:@"萌星说" localizedSubtitle:nil icon:icon1 userInfo:nil];
    UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc]initWithType:@"com.51fanxing.searchBrand" localizedTitle:@"搜品牌" localizedSubtitle:nil icon:icon2 userInfo:nil];
    UIMutableApplicationShortcutItem *item3 = [[UIMutableApplicationShortcutItem alloc]initWithType:@"com.51fanxing.receiptOfGoods" localizedTitle:@"查物流" localizedSubtitle:nil icon:icon3 userInfo:nil];
    UIMutableApplicationShortcutItem *item4 = [[UIMutableApplicationShortcutItem alloc]initWithType:@"com.51fanxing.starTicket" localizedTitle:@"摇星券" localizedSubtitle:nil icon:icon4 userInfo:nil];
    
    NSArray *items = @[item1, item2, item3,item4];
    NSArray *existingItems = [UIApplication sharedApplication].shortcutItems;
    NSArray *updatedItems = [existingItems arrayByAddingObjectsFromArray:items];
    [UIApplication sharedApplication].shortcutItems = updatedItems;
}

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler
{
    // 判断先前我们设置的唯一标识
    if([shortcutItem.type isEqualToString:@"com.51fanxing.adorableStar"]){

    }else if ([shortcutItem.type isEqualToString:@"com.51fanxing.searchBrand"]){
        
        
    }else if ([shortcutItem.type isEqualToString:@"com.51fanxing.receiptOfGoods"]){
        
    }else if ([shortcutItem.type isEqualToString:@"com.51fanxing.starTicket"]){
        
        
    }
}


- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

@end


================================================
FILE: KeepGuidePage/Find(发现)/Controller/KeepFindViewController.h
================================================
//
//  KeepFindViewController.h
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface KeepFindViewController : UIViewController

@end


================================================
FILE: KeepGuidePage/Find(发现)/Controller/KeepFindViewController.m
================================================
//
//  KeepFindViewController.m
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "KeepFindViewController.h"
#import "MYCollectionViewStreamLineFlowLayout.h"
#import "MYGroupIssueLabelCell.h"
#import "NSString+Extension.h"
#import "Constant.h"

@interface KeepFindViewController ()<UICollectionViewDelegate,UICollectionViewDataSource>

@property (nonatomic, strong) UICollectionView *collectionView;
@property (nonatomic, strong) NSArray *items;
@property (nonatomic, assign) CGFloat horizontalSpacing;
@property (nonatomic, assign) CGFloat verticalSpacing;

@end

@implementation KeepFindViewController

static NSString * const reusableGroupIssueLabelCellIdentifier = @"MYGroupIssueLabelCell";

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor whiteColor];
    self.horizontalSpacing = 15.f;
    self.verticalSpacing = 10.f;
    self.items = @[@"asdfjkalsdf",@"asdfjkalsdf",@"asdfjkalsdf",@"asdfjkalsdf",@"asdfjkalsdf",@"asdfjkalsdf"];
    [self.view addSubview:self.collectionView];
}

#pragma mark - UICollectionViewDataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return self.items.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    MYGroupIssueLabelCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reusableGroupIssueLabelCellIdentifier forIndexPath:indexPath];
    cell.detailLabel.text = self.items[indexPath.row];
    
    return cell;
}

#pragma mark - UICollectionViewDelegate

#pragma mark - UICollectionViewDelegateFlowLayout
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    NSString *textString = self.items[indexPath.row];
    CGFloat width = [textString mySizeWithFont:[UIFont systemFontOfSize:13.f]].width + 24.f;
    return CGSizeMake(width, 33.f);
}

#pragma mark - Lazy Load
- (UICollectionView *)collectionView {
    if (!_collectionView) {
        MYCollectionViewStreamLineFlowLayout *flowLayout = [[MYCollectionViewStreamLineFlowLayout alloc] init];
        flowLayout.minimumInteritemSpacing = self.horizontalSpacing;
        flowLayout.minimumLineSpacing = self.verticalSpacing;
        flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
        _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 64, KeepScreenWidth, KeepScreenHeight) collectionViewLayout:flowLayout];
        _collectionView.delegate = self;
        _collectionView.dataSource = self;
        _collectionView.backgroundColor = [UIColor clearColor];
        [_collectionView registerClass:[MYGroupIssueLabelCell class] forCellWithReuseIdentifier:reusableGroupIssueLabelCellIdentifier];
    }
    return _collectionView;
}

- (NSArray *)items {
    if (!_items) {
        _items = [NSArray array];
    }
    return _items;
}

@end


================================================
FILE: KeepGuidePage/Follow(关注)/Controller/KeepFollowViewController.h
================================================
//
//  KeepFollowViewController.h
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface KeepFollowViewController : UIViewController

@end


================================================
FILE: KeepGuidePage/Follow(关注)/Controller/KeepFollowViewController.m
================================================
//
//  KeepFollowViewController.m
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "KeepFollowViewController.h"

@interface KeepFollowViewController ()

@end

@implementation KeepFollowViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end


================================================
FILE: KeepGuidePage/Images.xcassets/3DTouch/.svn/all-wcprops
================================================
K 25
svn:wc:ra_dav:version-url
V 116
/svn/FXBest/!svn/ver/12661/05%20%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0/IOS/trunk/FXBEST/FXBEST/Images.xcassets/3DTouch
END
Contents.json
K 25
svn:wc:ra_dav:version-url
V 130
/svn/FXBest/!svn/ver/12661/05%20%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0/IOS/trunk/FXBEST/FXBEST/Images.xcassets/3DTouch/Contents.json
END


================================================
FILE: KeepGuidePage/Images.xcassets/3DTouch/.svn/entries
================================================
10

dir
12661
https://michael@192.168.1.11:443/svn/FXBest/05%20%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0/IOS/trunk/FXBEST/FXBEST/Images.xcassets/3DTouch
https://michael@192.168.1.11:443/svn/FXBest



2016-07-13T10:00:53.690397Z
12661
michael














51e9eb06-2f80-6248-b57d-47c989ba8145

fx_3DTouch_Star_Ticket.imageset
dir

Contents.json
file




2016-07-13T09:29:54.000000Z
31cc68f34934a99c0b0c1bebde56309c
2016-07-13T10:00:53.690397Z
12661
michael





















62

fx_3DTouch_AdorableStar.imageset
dir

fx_3DTouch_Receipt_of_goods.imageset
dir

fx_3DTouch_Search_brand.imageset
dir



================================================
FILE: KeepGuidePage/Images.xcassets/3DTouch/.svn/text-base/Contents.json.svn-base
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/3DTouch/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_AdorableStar.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "fx_3DTouch_AdorableStar@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "fx_3DTouch_AdorableStar@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Receipt_of_goods.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "fx_3DTouch_Receipt_of_goods@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "fx_3DTouch_Receipt_of_goods@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Search_brand.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "fx_3DTouch_Search_brand@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "fx_3DTouch_Search_brand@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Star_Ticket.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "fx_3DTouch_Star_Ticket@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "fx_3DTouch_Star_Ticket@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Account/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Account/qq.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "qq.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "qq@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "qq@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Account/qq_light.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "qq_light.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "qq_light@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "qq_light@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Account/wechat.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "wechat.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "wechat@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "wechat@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Account/wechat_light.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "wechat_light.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "wechat_light@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "wechat_light@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Account/weico.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "weico.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "weico@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "weico@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Account/weico_light.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "weico_light.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "weico_light@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "weico_light@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "AppIcon29x29@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "AppIcon29x29@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "AppIcon40x40@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "AppIcon40x40@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "AppIcon60x60@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "AppIcon60x60@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Brand Assets.launchimage/Contents.json
================================================
{
  "images" : [
    {
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "736h",
      "filename" : "LaunchImage-800-Portrait-736h@3x.png",
      "minimum-system-version" : "8.0",
      "orientation" : "portrait",
      "scale" : "3x"
    },
    {
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "667h",
      "filename" : "LaunchImage-800-667h@2x.png",
      "minimum-system-version" : "8.0",
      "orientation" : "portrait",
      "scale" : "2x"
    },
    {
      "orientation" : "portrait",
      "idiom" : "iphone",
      "filename" : "LaunchImage-700@2x.png",
      "extent" : "full-screen",
      "minimum-system-version" : "7.0",
      "scale" : "2x"
    },
    {
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "retina4",
      "filename" : "LaunchImage-700-568h@2x.png",
      "minimum-system-version" : "7.0",
      "orientation" : "portrait",
      "scale" : "2x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Find/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Find/discovery.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "discovery.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "discovery@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "discovery@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Find/discovery_on.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "discovery_on.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "discovery_on@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "discovery_on@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Follow/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Follow/trends.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "trends.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "trends@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "trends@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Follow/trends_on.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "trends_on.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "trends_on@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "trends_on@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Navigation/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Navigation/back.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "back.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "back@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "back@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Navigation/backbtn.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "backbtn.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "backbtn@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "backbtn@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/NewFeature/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/NewFeature/keep.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "keep6.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "keep6@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "keep6plus@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/PersonalCenter/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/PersonalCenter/personal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "personal.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "personal@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "personal@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/PersonalCenter/personal_on.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "personal_on.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "personal_on@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "personal_on@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Train/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Train/train.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "train.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "train@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "train@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Images.xcassets/Train/train_on.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "train_on.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "train_on@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "train_on@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: KeepGuidePage/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIcons</key>
	<dict/>
	<key>CFBundleIcons~ipad</key>
	<dict/>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>Keep</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
</dict>
</plist>


================================================
FILE: KeepGuidePage/Main(主要)/Controller/KeepNavigationViewController.h
================================================
//
//  KeepNavigationViewController.h
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface KeepNavigationViewController : UINavigationController

@end


================================================
FILE: KeepGuidePage/Main(主要)/Controller/KeepNavigationViewController.m
================================================
//
//  KeepNavigationViewController.m
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "KeepNavigationViewController.h"
#import "UIBarButtonItem+Extension.h"
#import "Constant.h"

@interface KeepNavigationViewController ()

@end  

@implementation KeepNavigationViewController

+ (void)initialize
{
//    // 设置整个项目barButtonItem中的主题样式
//    UIBarButtonItem *barButtonItem = [UIBarButtonItem appearance];
//    // 设置普通状态
//    NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
//    textAttrs[NSForegroundColorAttributeName] = FXRGBColor(7, 170, 153);
//    textAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:15];
//    [barButtonItem setTitleTextAttributes:textAttrs forState:UIControlStateNormal];
//    
//    // 设置不可用状态
//    NSMutableDictionary *selectedTextAttrs = [NSMutableDictionary dictionary];
//    selectedTextAttrs[NSForegroundColorAttributeName] = FXRGBColor(7, 170, 153);
//    
//    selectedTextAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:15];
//    [barButtonItem setTitleTextAttributes:selectedTextAttrs forState:UIControlStateSelected];
    
    // 设置UINavigationBar的背景色
    [[UINavigationBar appearance] setBarTintColor:KeepNavigationThemeColor];
    [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor],NSFontAttributeName:[UIFont systemFontOfSize:17]}];
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (self.viewControllers.count >= 1) {
        viewController.hidesBottomBarWhenPushed = YES;
        viewController.navigationItem.leftBarButtonItem = [UIBarButtonItem barButtonItemWithImage:@"back" target:self action:@selector(back)];
    }
    [super pushViewController:viewController animated:animated];
}

- (void)back
{
    [self popViewControllerAnimated:YES];
}

@end


================================================
FILE: KeepGuidePage/Main(主要)/Controller/KeepNewFeatureViewController.h
================================================
//
//  KeepNewFeatureViewController.h
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface KeepNewFeatureViewController : UIViewController

@end


================================================
FILE: KeepGuidePage/Main(主要)/Controller/KeepNewFeatureViewController.m
================================================
//
//  KeepNewFeatureViewController.m
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "KeepNewFeatureViewController.h"
#import <MediaPlayer/MediaPlayer.h>
#import "KeepNewFeatrueView.h"
#import "LoginViewController.h"
#import "RegisterViewController.h"

@interface KeepNewFeatureViewController ()<KeepNewFeatrueViewDelegate>

@property (nonatomic, strong) MPMoviePlayerController *moviePlayerController;
@property (nonatomic, strong) KeepNewFeatrueView *keepView;

@end

@implementation KeepNewFeatureViewController

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"keep" ofType:@"mp4"];
    
    self.moviePlayerController.contentURL = [[NSURL alloc] initFileURLWithPath:moviePath];
    
    [self.moviePlayerController play];
    
    [self.moviePlayerController.view bringSubviewToFront:self.keepView];
}

#pragma mark - NSNotificationCenter
- (void)playbackStateChanged
{
    MPMoviePlaybackState playbackState = [self.moviePlayerController playbackState];
    if (playbackState == MPMoviePlaybackStateStopped || playbackState == MPMoviePlaybackStatePaused) {
        [self.moviePlayerController play];
    }
}

#pragma mark - KeepNewFeatrueViewDelegate
// 登录
- (void)keepNewFeatrueView:(nullable KeepNewFeatrueView *)keepNewFeatrueView didLogin:(nullable UIButton *)loginButton
{
    LoginViewController *login = [[LoginViewController alloc] init];
    [self.navigationController pushViewController:login animated:YES];
}
// 注册
- (void)keepNewFeatrueView:(nullable KeepNewFeatrueView *)keepNewFeatrueView didRegister:(nullable UIButton *)registerButton
{
    RegisterViewController *registerController = [[RegisterViewController alloc] init];
    [self.navigationController pushViewController:registerController animated:YES];
}

#pragma mark - setter and getter
- (MPMoviePlayerController *)moviePlayerController
{
    if (!_moviePlayerController) {
        _moviePlayerController = [[MPMoviePlayerController alloc] init];
        _moviePlayerController.movieSourceType = MPMovieSourceTypeFile;
        _moviePlayerController.controlStyle = MPMovieControlStyleNone;
        _moviePlayerController.view.frame = [UIScreen mainScreen].bounds;
        [_moviePlayerController setFullscreen:YES];
        [_moviePlayerController setShouldAutoplay:YES];
        [_moviePlayerController setRepeatMode:MPMovieRepeatModeOne];
        [self.view addSubview:self.moviePlayerController.view];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackStateChanged) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];
        
    }
    return _moviePlayerController;
}

- (KeepNewFeatrueView *)keepView
{
    if (!_keepView) {
        _keepView = [[KeepNewFeatrueView alloc] init];
        _keepView.delegate = self;
        _keepView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
        [self.moviePlayerController.view addSubview:_keepView];
    }
    return _keepView;
}

@end


================================================
FILE: KeepGuidePage/Main(主要)/Controller/KeepTabBarViewController.h
================================================
//
//  KeepTabBarViewController.h
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface KeepTabBarViewController : UITabBarController

@end


================================================
FILE: KeepGuidePage/Main(主要)/Controller/KeepTabBarViewController.m
================================================
//
//  KeepTabBarViewController.m
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "KeepTabBarViewController.h"
#import "KeepNavigationViewController.h"
#import "KeepTrainViewController.h"
#import "KeepFindViewController.h"
#import "KeepFollowViewController.h"
#import "KeepPersonalViewController.h"

@interface KeepTabBarViewController ()

@end

@implementation KeepTabBarViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    KeepTrainViewController *train = [[KeepTrainViewController alloc] init];
    
    [self addChildViewController:train andWithTitle:@"训练" andWithImage:@"train" andWithSelectedImage:@"train_on"];
    
    KeepFindViewController *find = [[KeepFindViewController alloc] init];
    [self addChildViewController:find andWithTitle:@"发现" andWithImage:@"discovery" andWithSelectedImage:@"discovery_on"];
    
    KeepFollowViewController *follow = [[KeepFollowViewController alloc] init];
    [self addChildViewController:follow andWithTitle:@"关注" andWithImage:@"trends" andWithSelectedImage:@"trends_on"];
    
    KeepPersonalViewController *personal = [[KeepPersonalViewController alloc] init];
    [self addChildViewController:personal andWithTitle:@"我" andWithImage:@"personal" andWithSelectedImage:@"personal_on"];
}

- (void)addChildViewController:(UIViewController *)childViewController andWithTitle:(NSString *)title andWithImage:(NSString *)image andWithSelectedImage:(NSString *)selectedImage;
{
    childViewController.title = title;
    NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
    textAttrs[NSForegroundColorAttributeName] = [UIColor grayColor];
    textAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:10.0];
    [childViewController.tabBarItem setTitleTextAttributes:textAttrs forState:UIControlStateNormal];
    NSMutableDictionary *textSelectAttrs = [NSMutableDictionary dictionary];
    textSelectAttrs[NSForegroundColorAttributeName] = [[UIColor alloc]initWithRed:70/255.0 green:61/255.0 blue:78/255.0 alpha:1.0];
    [childViewController.tabBarItem setTitleTextAttributes:textSelectAttrs forState:UIControlStateSelected];
    childViewController.tabBarItem.image = [UIImage imageNamed:image];
    childViewController.tabBarItem.selectedImage = [[UIImage imageNamed:selectedImage] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    KeepNavigationViewController *navController = [[KeepNavigationViewController alloc] initWithRootViewController:childViewController];
    [self addChildViewController:navController];
}

@end


================================================
FILE: KeepGuidePage/NewFeatrue(新特性)/View/KeepAdLabel.h
================================================
//
//  KeepAdLabel.h
//  KeepGuidePage
//
//  Created by Michael on 16/6/30.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface KeepAdLabel : UILabel

@end


================================================
FILE: KeepGuidePage/NewFeatrue(新特性)/View/KeepAdLabel.m
================================================
//
//  KeepAdLabel.m
//  KeepGuidePage
//
//  Created by Michael on 16/6/30.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "KeepAdLabel.h"

@implementation KeepAdLabel

- (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        
        self.font = [UIFont fontWithName:@"Helvetica" size:23.0];
        self.textAlignment = NSTextAlignmentCenter;
        self.textColor = [UIColor whiteColor];
    }
    return self;
}

@end


================================================
FILE: KeepGuidePage/NewFeatrue(新特性)/View/KeepAdScrollView.h
================================================
//
//  KeepAdScrollView.h
//  KeepGuidePage
//
//  Created by Michael on 16/6/30.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface KeepAdScrollView : UIScrollView

@property (nonatomic, strong) NSArray *titles;
@property (nonatomic, strong) UIPageControl *pageControl;

@end


================================================
FILE: KeepGuidePage/NewFeatrue(新特性)/View/KeepAdScrollView.m
================================================
//
//  KeepAdScrollView.m
//  KeepGuidePage
//
//  Created by Michael on 16/6/30.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "KeepAdScrollView.h"
#import "KeepAdLabel.h"

@interface KeepAdScrollView ()<UIScrollViewDelegate>

@property (nonatomic, strong) NSTimer *timer;

@end
@implementation KeepAdScrollView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.delegate = self;
        self.scrollsToTop = NO;
    }
    return self;
}

#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat scrollW = self.bounds.size.width;
    int page = (scrollView.contentOffset.x + scrollW * 0.5) / scrollW;
    page --;
    self.pageControl.currentPage = page;
    
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self removeTimer];
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    [self addTimer];
}

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
    [self scrollViewDidStop:scrollView];
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    [self scrollViewDidStop:scrollView];
}


- (void)scrollViewDidStop:(UIScrollView *)scrollView
{
    CGFloat scrollW = [UIScreen mainScreen].bounds.size.width;
    int page = (self.contentOffset.x + 0.5 * scrollW) / scrollW;
    if (page == 0){
        [self setContentOffset:CGPointMake(scrollW * self.titles.count, 0)];
    } else if (page == (self.titles.count + 1)) {
        [self setContentOffset:CGPointMake(scrollW , 0)];
    }
}

#pragma mark - Private method
- (void)setTitles:(NSArray *)titles
{
    _titles = titles;
    self.pageControl.numberOfPages = self.titles.count;
    [self setbanner];
}

- (void)setbanner
{
    [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    
    CGFloat W = [UIScreen mainScreen].bounds.size.width;
    CGFloat H = 30;
    CGFloat Y = self.bounds.size.height - H;

    KeepAdLabel *lastLabel = [[KeepAdLabel alloc] init];
    
    KeepAdLabel *firstLabel = [[KeepAdLabel alloc] init];
    
    for (int i = 0; i < self.titles.count; i++) {
        
        KeepAdLabel *advertLabel = [[KeepAdLabel alloc] init];
        
        CGFloat X = i * W + W;
        advertLabel.frame = CGRectMake(X , Y, W, H);
        advertLabel.text = self.titles[i];
  
        if (i == 0) {
            firstLabel.text = self.titles[i];
        }
        if (i == self.titles.count - 1) {
            lastLabel.text = self.titles[i];
        }
        [self addSubview:advertLabel];
    }
    
    lastLabel.frame = CGRectMake(0, Y, W, H);
    [self addSubview:lastLabel];
    
    firstLabel.frame = CGRectMake((self.titles.count + 1) * W, Y, W, H);
    [self addSubview:firstLabel];

    CGFloat contentW = (self.titles.count + 2) * W;
    self.contentSize = CGSizeMake(contentW, 0);

    self.showsHorizontalScrollIndicator = NO;
    
    self.pagingEnabled = YES;
    
    self.pageControl.currentPage = 0;
    
    [self setContentOffset:CGPointMake(W, 0)];
    
    [self addTimer];
}

- (void)addTimer
{
    self.timer = [NSTimer timerWithTimeInterval:3.0f target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
    
    [[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes];
}

- (void)nextImage
{
    NSInteger page = 0;
    if (self.pageControl.currentPage == self.titles.count) {
        page = 0;
    } else {
        page = self.pageControl.currentPage + 1;
    }
    CGFloat offsetX = (page + 1) * self.bounds.size.width;
    CGPoint offset = CGPointMake(offsetX, 0);
    
    [self setContentOffset:offset animated:YES];
    
}

- (void)removeTimer
{
    [self.timer invalidate];
    self.timer = nil;
}

- (void)dealloc
{
    [self removeTimer];
}


@end


================================================
FILE: KeepGuidePage/NewFeatrue(新特性)/View/KeepNewFeatrueView.h
================================================
//
//  KeepNewFeatrueView.h
//  KeepGuidePage
//
//  Created by Michael on 16/6/30.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>
@class KeepNewFeatrueView;

@protocol KeepNewFeatrueViewDelegate <NSObject>

// 登录
- (void)keepNewFeatrueView:(nullable KeepNewFeatrueView *)keepNewFeatrueView didLogin:(nullable UIButton *)loginButton;
// 注册
- (void)keepNewFeatrueView:(nullable KeepNewFeatrueView *)keepNewFeatrueView didRegister:(nullable UIButton *)registerButton;

@end

@interface KeepNewFeatrueView : UIView

@property (nonatomic, weak, nullable) id <KeepNewFeatrueViewDelegate> delegate;

@end


================================================
FILE: KeepGuidePage/NewFeatrue(新特性)/View/KeepNewFeatrueView.m
================================================
//
//  KeepNewFeatrueView.m
//  KeepGuidePage
//
//  Created by Michael on 16/6/30.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "KeepNewFeatrueView.h"
#import "KeepAdScrollView.h"

@interface KeepNewFeatrueView ()

@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UIButton *registerButton;
@property (nonatomic, strong) UIButton *loginButton;
@property (nonatomic, strong) KeepAdScrollView *adScrollView;
@property (nonatomic, strong) UIPageControl *pageControl;

@end

@implementation KeepNewFeatrueView

- (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
       
        [self addSubview:self.imageView];
        
        [self addSubview:self.registerButton];
        
        [self addSubview:self.loginButton];

        [self addSubview:self.adScrollView];
        
        self.adScrollView.titles = @[@"全程记录你的健身数据",@"规范你的训练过程",@"陪伴你迈出跑步的第一步",@"分享汗水后你的性感"];
   
        self.pageControl.numberOfPages = self.adScrollView.titles.count;
    }
    return self;
}

- (void)registerClick:(UIButton *)registerButton
{
    if ([self.delegate respondsToSelector:@selector(keepNewFeatrueView:didRegister:)]) {
        [self.delegate keepNewFeatrueView:self didRegister:registerButton];
    }
}

- (void)login:(UIButton *)loginButton
{
    if ([self.delegate respondsToSelector:@selector(keepNewFeatrueView:didLogin:)]) {
        [self.delegate keepNewFeatrueView:self didLogin:loginButton];
    }
}

#pragma mark - setter and getter
- (UIImageView *)imageView
{
    if (!_imageView) {
        UIImage *image = [UIImage imageNamed:@"keep"];
        _imageView = [[UIImageView alloc] initWithImage:image];
        CGFloat X = ([UIScreen mainScreen].bounds.size.width - image.size.width) * 0.5;
        CGFloat Y = [UIScreen mainScreen].bounds.size.height * 0.25;
        _imageView.frame = CGRectMake(X, Y, image.size.width, image.size.height);
        [self addSubview:_imageView];
    }
    return _imageView;
}

- (UIButton *)registerButton
{
    if (!_registerButton) {
        _registerButton = [UIButton buttonWithType:UIButtonTypeCustom];
        CGFloat margin = 20;
        CGFloat X = margin;
        CGFloat H = 50;
        CGFloat W = ([UIScreen mainScreen].bounds.size.width - 3 * margin) * 0.5;
        CGFloat Y = [UIScreen mainScreen].bounds.size.height - H - 15;
        _registerButton.frame = CGRectMake(X, Y, W, H);
        [_registerButton setTitle:@"注册" forState:UIControlStateNormal];
        [_registerButton setBackgroundColor:[UIColor blackColor]];
        _registerButton.titleLabel.font = [UIFont systemFontOfSize:18];
        [_registerButton addTarget:self action:@selector(registerClick:) forControlEvents:UIControlEventTouchUpInside];
        _registerButton.layer.cornerRadius = 3.0f;
        _registerButton.alpha = 0.4f;
    }
    return _registerButton;
}

- (UIButton *)loginButton
{
    if (!_loginButton) {
        _loginButton = [UIButton buttonWithType:UIButtonTypeCustom];
        CGFloat margin = 20;
        CGFloat X = CGRectGetMaxX(self.registerButton.frame) + margin;
        CGFloat H = 50;
        CGFloat W = ([UIScreen mainScreen].bounds.size.width - 3 * margin) * 0.5;
        CGFloat Y = [UIScreen mainScreen].bounds.size.height - H - 15;
        _loginButton.frame = CGRectMake(X, Y, W, H);
        [_loginButton setTitle:@"登录" forState:UIControlStateNormal];
        [_loginButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [_loginButton setBackgroundColor:[UIColor whiteColor]];
        [_loginButton addTarget:self action:@selector(login:) forControlEvents:UIControlEventTouchUpInside];
        _loginButton.titleLabel.font = [UIFont systemFontOfSize:18];
        _loginButton.layer.cornerRadius = 3.0f;
        _loginButton.alpha = 0.4f;
    }
    return _loginButton;
}

- (KeepAdScrollView *)adScrollView
{
    if (!_adScrollView) {
        _adScrollView = [[KeepAdScrollView alloc] init];
        _adScrollView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 105);
        _adScrollView.pageControl = self.pageControl;
    }
    return _adScrollView;
}

- (UIPageControl *)pageControl
{
    if (!_pageControl) {
        _pageControl = [[UIPageControl alloc] init];
        CGFloat W = self.adScrollView.titles.count * 5;
        _pageControl.frame = CGRectMake(0, CGRectGetMaxY(self.adScrollView.frame) + 10, W, 10);
        _pageControl.currentPage = 0;
        [self addSubview:_pageControl];
    }
    return _pageControl;
}

@end


================================================
FILE: KeepGuidePage/PersonalCenter(个人中心)/Controller/KeepPersonalViewController.h
================================================
//
//  KeepPersonalViewController.h
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface KeepPersonalViewController : UIViewController

@end


================================================
FILE: KeepGuidePage/PersonalCenter(个人中心)/Controller/KeepPersonalViewController.m
================================================
//
//  KeepPersonalViewController.m
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "KeepPersonalViewController.h"

@interface KeepPersonalViewController ()

@end

@implementation KeepPersonalViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end


================================================
FILE: KeepGuidePage/Public(公共库)/Category/NSString+Extension.h
================================================
//
//  NSString+Extension.h
//  KeepGuidePage
//
//  Created by Michael on 2017/2/14.
//  Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface NSString (Extension)

- (CGSize)mySizeWithFont:(UIFont *)font maxSize:(CGSize)size lineBreakMode:(NSLineBreakMode)mode;
- (CGSize)mySizeWithFont:(UIFont *)font;
- (CGSize)mySizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size;
- (CGSize)mySizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode;

@end


================================================
FILE: KeepGuidePage/Public(公共库)/Category/NSString+Extension.m
================================================
//
//  NSString+Extension.m
//  KeepGuidePage
//
//  Created by Michael on 2017/2/14.
//  Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "NSString+Extension.h"

@implementation NSString (Extension)

- (CGSize)mySizeWithFont:(UIFont *)font maxSize:(CGSize)size lineBreakMode:(NSLineBreakMode)mode
{
    CGSize realSize = CGSizeZero;
    CGRect textRect = [self boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil];
    realSize = textRect.size;
    realSize.width = ceilf(realSize.width);
    realSize.height = ceilf(realSize.height);
    return realSize;
}

- (CGSize)mySizeWithFont:(UIFont *)font
{
    CGSize resultSize = [self mySizeWithFont:font constrainedToSize:CGSizeMake(MAXFLOAT, font.lineHeight)];
    
    return resultSize;
}

- (CGSize)mySizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
{
    CGSize resultSize = [self mySizeWithFont:font constrainedToSize:size lineBreakMode:NSLineBreakByWordWrapping];
    
    return resultSize;
}

- (CGSize)mySizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode
{
    CGSize resultSize = [self mySizeWithFont:font maxSize:size lineBreakMode:lineBreakMode];
    
    return resultSize;
}


@end


================================================
FILE: KeepGuidePage/Public(公共库)/Category/UIBarButtonItem+Extension.h
================================================
//
//  UIBarButtonItem+Extension.h
//  LdleFishGuidePage
//
//  Created by Michael on 16/7/26.
//  Copyright © 2016年 com.51fanxing.searchController. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIBarButtonItem (Extension)

+ (nullable UIBarButtonItem *)barButtonItemWithImage:(nullable NSString *)imageName highlightImage:(nullable NSString *)highlightImageName target:(nullable id)target action:(nullable SEL)action;

+ (nullable UIBarButtonItem *)barButtonItemWithImage:(nullable NSString *)imageName target:(nullable id)target action:(nullable SEL)action;

@end


================================================
FILE: KeepGuidePage/Public(公共库)/Category/UIBarButtonItem+Extension.m
================================================
//
//  UIBarButtonItem+Extension.m
//  LdleFishGuidePage
//
//  Created by Michael on 16/7/26.
//  Copyright © 2016年 com.51fanxing.searchController. All rights reserved.
//

#import "UIBarButtonItem+Extension.h"
#import "UIView+Extension.h"
#import "KeepCancelHighlightButton.h"

@implementation UIBarButtonItem (Extension)

+ (nullable UIBarButtonItem *)barButtonItemWithImage:(nullable NSString *)imageName highlightImage:(nullable NSString *)highlightImageName target:(nullable id)target action:(nullable SEL)action
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
    [button setBackgroundImage:[UIImage imageNamed:highlightImageName] forState:UIControlStateHighlighted];
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    button.size = button.currentBackgroundImage.size;
    return [[UIBarButtonItem alloc] initWithCustomView:button];
}

+ (nullable UIBarButtonItem *)barButtonItemWithImage:(nullable NSString *)imageName target:(nullable id)target action:(nullable SEL)action
{
    KeepCancelHighlightButton *button = [KeepCancelHighlightButton buttonWithType:UIButtonTypeCustom];
    [button setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    button.size = button.currentBackgroundImage.size;
    return [[UIBarButtonItem alloc] initWithCustomView:button];
}

@end


================================================
FILE: KeepGuidePage/Public(公共库)/Category/UIColor+Extension.h
================================================
//
//  UIColor+Extension.h
//  MYAlertView
//
//  Created by Michael on 2017/2/14.
//  Copyright © 2017年 com.chinabidding. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIColor (Extension)

+ (UIColor *)colorWithHexString:(NSString *)color;

@end


================================================
FILE: KeepGuidePage/Public(公共库)/Category/UIColor+Extension.m
================================================
//
//  UIColor+Extension.m
//  MYAlertView
//
//  Created by Michael on 2017/2/14.
//  Copyright © 2017年 com.chinabidding. All rights reserved.
//

#import "UIColor+Extension.h"

@implementation UIColor (Extension)

//将十六进至的方法转化为UIColor对象
+ (UIColor *)colorWithHexString:(NSString *)color
{
    NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
    
    // String should be 6 or 8 characters
    if ([cString length] < 6) {
        return [UIColor clearColor];
    }
    
    // strip 0X if it appears
    if ([cString hasPrefix:@"0X"])
        cString = [cString substringFromIndex:2];
    if ([cString hasPrefix:@"#"])
        cString = [cString substringFromIndex:1];
    if ([cString length] != 6)
        return [UIColor clearColor];
    
    // Separate into r, g, b substrings
    NSRange range;
    range.location = 0;
    range.length = 2;
    
    //r
    NSString *rString = [cString substringWithRange:range];
    
    //g
    range.location = 2;
    NSString *gString = [cString substringWithRange:range];
    
    //b
    range.location = 4;
    NSString *bString = [cString substringWithRange:range];
    
    // Scan values
    unsigned int r, g, b;
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];
    
    return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f];
}

@end


================================================
FILE: KeepGuidePage/Public(公共库)/Category/UILabel+Extension.h
================================================
//
//  UILabel+Extension.h
//  MYAlertView
//
//  Created by Michael on 2017/2/14.
//  Copyright © 2017年 com.chinabidding. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UILabel (Extension)

- (void)sizeToFitWidth:(float)width;

@end


================================================
FILE: KeepGuidePage/Public(公共库)/Category/UILabel+Extension.m
================================================
//
//  UILabel+Extension.m
//  MYAlertView
//
//  Created by Michael on 2017/2/14.
//  Copyright © 2017年 com.chinabidding. All rights reserved.
//

#import "UILabel+Extension.h"
#import "UIView+Extension.h"

@implementation UILabel (Extension)

- (void)sizeToFitWidth:(float)width {
    self.numberOfLines = 0;
    self.lineBreakMode = NSLineBreakByCharWrapping;
    self.size = [self sizeThatFits:CGSizeMake(width, 0)];
}


@end


================================================
FILE: KeepGuidePage/Public(公共库)/Category/UIView+Extension.h
================================================
//
//  UIView+Extension.h
//  FXBEST
//
//  Created by fanxing on 16/6/16.
//  Copyright © 2016年 51fanxing. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIView (Extension)

@property (nonatomic, assign) CGFloat x;
@property (nonatomic, assign) CGFloat y;
@property (nonatomic, assign) CGFloat width;
@property (nonatomic, assign) CGFloat height;
@property (nonatomic, assign) CGSize size;
@property (nonatomic, assign) CGPoint origin;
@property (nonatomic, assign) CGFloat centerX;
@property (nonatomic, assign) CGFloat centerY;
@property (nonatomic, assign) CGFloat left;
@property (nonatomic, assign) CGFloat top;
@property (nonatomic, assign) CGFloat right;
@property (nonatomic, assign) CGFloat bottom;

@end


================================================
FILE: KeepGuidePage/Public(公共库)/Category/UIView+Extension.m
================================================
//
//  UIView+Extension.m
//  FXBEST
//
//  Created by fanxing on 16/6/16.
//  Copyright © 2016年 51fanxing. All rights reserved.
//

#import "UIView+Extension.h"

@implementation UIView (Extension)

- (void)setX:(CGFloat)x
{
    CGRect frame = self.frame;
    frame.origin.x = x;
    self.frame = frame;
}

- (CGFloat)x
{
    return self.frame.origin.x;
}

- (void)setY:(CGFloat)y
{
    CGRect frame = self.frame;
    frame.origin.y = y;
    self.frame = frame;
}

- (CGFloat)y
{
    return self.frame.origin.y;
}

- (void)setWidth:(CGFloat)width
{
    CGRect frame = self.frame;
    frame.size.width = width;
    self.frame = frame;
}

- (CGFloat)width
{
    return self.frame.size.width;
}

- (void)setHeight:(CGFloat)height
{
    CGRect frame = self.frame;
    frame.size.height = height;
    self.frame = frame;
}

- (CGFloat)height
{
    return self.frame.size.height;
}

- (void)setSize:(CGSize)size
{
    CGRect frame = self.frame;
    frame.size = size;
    self.frame = frame;
}

- (CGFloat)left
{
    return self.frame.origin.x;
}

- (void)setLeft:(CGFloat)x
{
    CGRect frame = self.frame;
    frame.origin.x = x;
    self.frame = frame;
}

- (CGFloat)top
{
    return self.frame.origin.y;
}

- (void)setTop:(CGFloat)y
{
    CGRect frame = self.frame;
    frame.origin.y = y;
    self.frame = frame;
}

- (CGFloat)right
{
    return self.frame.origin.x + self.frame.size.width;
}

- (void)setRight:(CGFloat)right
{
    CGRect frame = self.frame;
    frame.origin.x = right - frame.size.width;
    self.frame = frame;
}

- (CGFloat)bottom
{
    return self.frame.origin.y + self.frame.size.height;
}

- (void)setBottom:(CGFloat)bottom
{
    CGRect frame = self.frame;
    frame.origin.y = bottom - frame.size.height;
    self.frame = frame;
}


- (CGSize)size
{
    return self.frame.size;
}

- (void)setOrigin:(CGPoint)origin
{
    CGRect frame = self.frame;
    frame.origin = origin;
    self.frame = frame;
}

- (CGPoint)origin
{
    return self.frame.origin;
}

- (void)setCenterX:(CGFloat)centerX
{
    CGPoint center = self.center;
    center.x = centerX;
    self.center = center;
}

- (CGFloat)centerX
{
    return self.center.x;
}

- (void)setCenterY:(CGFloat)centerY
{
    CGPoint center = self.center;
    center.y = centerY;
    self.center = center;
}

- (CGFloat)centerY
{
    return self.center.y;
}

@end


================================================
FILE: KeepGuidePage/Public(公共库)/CustomView/KeepCancelHighlightButton.h
================================================
//
//  KeepCancelHighlightButton.h
//  KeepGuidePage
//
//  Created by Michael on 16/7/29.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface KeepCancelHighlightButton : UIButton

@end


================================================
FILE: KeepGuidePage/Public(公共库)/CustomView/KeepCancelHighlightButton.m
================================================
//
//  KeepCancelHighlightButton.m
//  KeepGuidePage
//
//  Created by Michael on 16/7/29.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "KeepCancelHighlightButton.h"

@implementation KeepCancelHighlightButton

- (void)setHighlighted:(BOOL)highlighted
{
    
}

@end


================================================
FILE: KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYCollectionViewStreamLineFlowLayout.h
================================================
//
//  MYCollectionViewStreamLineFlowLayout.h
//  KeepGuidePage
//
//  Created by Michael on 2017/2/14.
//  Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MYCollectionViewStreamLineFlowLayout : UICollectionViewFlowLayout

@end


================================================
FILE: KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYCollectionViewStreamLineFlowLayout.m
================================================
//
//  MYCollectionViewStreamLineFlowLayout.m
//  KeepGuidePage
//
//  Created by Michael on 2017/2/14.
//  Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "MYCollectionViewStreamLineFlowLayout.h"

@implementation MYCollectionViewStreamLineFlowLayout

- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
    NSMutableArray *attributes = [[NSMutableArray alloc] initWithArray:[super layoutAttributesForElementsInRect:rect]];
    
    CGFloat xOffset = 0.0f;
    CGFloat lastCenterY = 0.0f, newCenterY;
    CGRect frame;
    
    for (UICollectionViewLayoutAttributes *attribute in attributes) {
        frame = attribute.frame;
        newCenterY = frame.origin.y + frame.size.height / 2;
        
        if (frame.origin.x == self.sectionInset.left || abs((int) (newCenterY - lastCenterY)) > 1) {
            xOffset = self.sectionInset.left;
            lastCenterY = newCenterY;
        }
        
        frame.origin.x = xOffset;
        attribute.frame = frame;
        
        xOffset += CGRectGetWidth(frame) + self.minimumInteritemSpacing;
    }
    
    return attributes;
}

@end


================================================
FILE: KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYGroupIssueLabelCell.h
================================================
//
//  MYGroupIssueLabelCell.h
//  KeepGuidePage
//
//  Created by Michael on 2017/2/14.
//  Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MYGroupIssueLabelCell : UICollectionViewCell

@property (nonatomic, strong) UILabel *detailLabel;

@end


================================================
FILE: KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYGroupIssueLabelCell.m
================================================
//
//  MYGroupIssueLabelCell.m
//  KeepGuidePage
//
//  Created by Michael on 2017/2/14.
//  Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "MYGroupIssueLabelCell.h"
#import "UIColor+Extension.h"

@interface MYGroupIssueLabelCell()

@end

@implementation MYGroupIssueLabelCell

- (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        [self setup];
    }
    return self;
}

- (void)setup
{
    self.layer.borderColor = [UIColor colorWithHexString:@"#e5e5e5"].CGColor;
    self.layer.borderWidth = 0.5f;
    self.detailLabel.frame = self.contentView.bounds;
    [self.contentView addSubview:self.detailLabel];
}

- (void)layoutSubviews
{
    [super layoutSubviews];
    
    self.layer.cornerRadius = self.bounds.size.height / 2;
    self.clipsToBounds = YES;
}

- (void)prepareForReuse
{
    [super prepareForReuse];
    self.layer.borderColor = [UIColor colorWithHexString:@"#e5e5e5"].CGColor;
    self.detailLabel.textColor = [UIColor colorWithHexString:@"#333333"];
}

- (UILabel *)detailLabel
{
    if (_detailLabel == nil) {
        _detailLabel = [[UILabel alloc] init];
        _detailLabel.font = [UIFont systemFontOfSize:13.f];
        _detailLabel.textAlignment = NSTextAlignmentCenter;
        _detailLabel.textColor = [UIColor colorWithHexString:@"#333333"];
        _detailLabel.text = @"标签";
    }
    return _detailLabel;
}

- (void)setSelected:(BOOL)selected
{
    [super setSelected:selected];
    if (selected) {
        self.layer.borderColor = [UIColor colorWithHexString:@"#fa4b9b"].CGColor;
        self.detailLabel.textColor = [UIColor colorWithHexString:@"#fa4b9b"];
    } else {
        self.layer.borderColor = [UIColor colorWithHexString:@"#e5e5e5"].CGColor;
        self.detailLabel.textColor = [UIColor colorWithHexString:@"#333333"];
    }
}

@end


================================================
FILE: KeepGuidePage/Public(公共库)/Other/Constant.h
================================================
//
//  Constant.h
//  LdleFishGuidePage
//
//  Created by Michael on 16/7/26.
//  Copyright © 2016年 com.51fanxing.searchController. All rights reserved.
//

#import <Foundation/Foundation.h>

// 屏幕尺寸
#define KeepScreenBounds [UIScreen mainScreen].bounds
#define KeepScreenSize [UIScreen mainScreen].bounds.size
#define KeepScreenWidth [UIScreen mainScreen].bounds.size.width
#define KeepScreenHeight [UIScreen mainScreen].bounds.size.height

// RGB颜色
#define KeepRGBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
#define KeepRGBA(R, G, B, A) [UIColor colorWithRed:(R)/255.f green:(G)/255.f blue:(B)/255.f alpha:(A)]
// 主题颜色
#define KeepNavigationBarYellowColor KeepRGBColor(254.0, 212.0, 53.0)
#define KeepNavigationThemeColor KeepRGBColor(89.0, 79.0, 95.0)  


================================================
FILE: KeepGuidePage/Public(公共库)/Other/Constant.m
================================================
//
//  Constant.m
//  LdleFishGuidePage
//
//  Created by Michael on 16/7/26.
//  Copyright © 2016年 com.51fanxing.searchController. All rights reserved.
//

#import "Constant.h"


================================================
FILE: KeepGuidePage/Train(训练)/Controller/KeepTrainViewController.h
================================================
//
//  KeepTrainViewController.h
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface KeepTrainViewController : UIViewController

@end


================================================
FILE: KeepGuidePage/Train(训练)/Controller/KeepTrainViewController.m
================================================
//
//  KeepTrainViewController.m
//  KeepGuidePage
//
//  Created by Michael on 16/7/22.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import "KeepTrainViewController.h"

@interface KeepTrainViewController ()

@end

@implementation KeepTrainViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end


================================================
FILE: KeepGuidePage/main.m
================================================
//
//  main.m
//  KeepGuidePage
//
//  Created by Michael on 16/6/30.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}


================================================
FILE: KeepGuidePage.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		4C670B4B1E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C670B4A1E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.m */; };
		4C670B4E1E5347C200281698 /* MYGroupIssueLabelCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C670B4D1E5347C200281698 /* MYGroupIssueLabelCell.m */; };
		4C670B531E53483800281698 /* UIColor+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C670B501E53483800281698 /* UIColor+Extension.m */; };
		4C670B541E53483800281698 /* UILabel+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C670B521E53483800281698 /* UILabel+Extension.m */; };
		4C670B571E53498200281698 /* NSString+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C670B561E53498200281698 /* NSString+Extension.m */; };
		4CCB2DD71D42714E007BAE45 /* KeepTabBarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DD61D42714E007BAE45 /* KeepTabBarViewController.m */; };
		4CCB2DDA1D427188007BAE45 /* KeepNewFeatureViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DD91D427188007BAE45 /* KeepNewFeatureViewController.m */; };
		4CCB2DED1D427676007BAE45 /* KeepNavigationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DEC1D427676007BAE45 /* KeepNavigationViewController.m */; };
		4CCB2DF01D427705007BAE45 /* KeepTrainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DEF1D427705007BAE45 /* KeepTrainViewController.m */; };
		4CCB2DF31D427715007BAE45 /* KeepFindViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DF21D427715007BAE45 /* KeepFindViewController.m */; };
		4CCB2DF61D427724007BAE45 /* KeepFollowViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DF51D427724007BAE45 /* KeepFollowViewController.m */; };
		4CCB2DF91D427736007BAE45 /* KeepPersonalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DF81D427736007BAE45 /* KeepPersonalViewController.m */; };
		4CE9CDDF1D4B506E00132928 /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDDE1D4B506E00132928 /* LoginViewController.m */; };
		4CE9CDE21D4B508E00132928 /* RegisterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDE11D4B508E00132928 /* RegisterViewController.m */; };
		4CE9CDE71D4B5E6200132928 /* UIBarButtonItem+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDE61D4B5E6200132928 /* UIBarButtonItem+Extension.m */; };
		4CE9CDEA1D4B5E7800132928 /* UIView+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDE91D4B5E7800132928 /* UIView+Extension.m */; };
		4CE9CDEE1D4B5ED800132928 /* KeepCancelHighlightButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDED1D4B5ED800132928 /* KeepCancelHighlightButton.m */; };
		4CE9CDF21D4B608B00132928 /* Constant.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDF11D4B608B00132928 /* Constant.m */; };
		4CFC68081D25082E00BD60F8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC68071D25082E00BD60F8 /* main.m */; };
		4CFC680B1D25082E00BD60F8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC680A1D25082E00BD60F8 /* AppDelegate.m */; };
		4CFC68211D25082F00BD60F8 /* KeepGuidePageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC68201D25082F00BD60F8 /* KeepGuidePageTests.m */; };
		4CFC682C1D25082F00BD60F8 /* KeepGuidePageUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC682B1D25082F00BD60F8 /* KeepGuidePageUITests.m */; };
		4CFC683A1D2508A700BD60F8 /* keep.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 4CFC68391D2508A700BD60F8 /* keep.mp4 */; };
		4CFC683C1D251A7B00BD60F8 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4CFC683B1D251A7B00BD60F8 /* Images.xcassets */; };
		4CFC68481D251C9E00BD60F8 /* KeepNewFeatrueView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC68471D251C9E00BD60F8 /* KeepNewFeatrueView.m */; };
		4CFC684B1D25258200BD60F8 /* KeepAdScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC684A1D25258200BD60F8 /* KeepAdScrollView.m */; };
		4CFC684E1D252B0C00BD60F8 /* KeepAdLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC684D1D252B0C00BD60F8 /* KeepAdLabel.m */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
		4CFC681D1D25082F00BD60F8 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = 4CFC67FB1D25082E00BD60F8 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = 4CFC68021D25082E00BD60F8;
			remoteInfo = KeepGuidePage;
		};
		4CFC68281D25082F00BD60F8 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = 4CFC67FB1D25082E00BD60F8 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = 4CFC68021D25082E00BD60F8;
			remoteInfo = KeepGuidePage;
		};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
		4C670B491E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MYCollectionViewStreamLineFlowLayout.h; sourceTree = "<group>"; };
		4C670B4A1E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MYCollectionViewStreamLineFlowLayout.m; sourceTree = "<group>"; };
		4C670B4C1E5347C200281698 /* MYGroupIssueLabelCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MYGroupIssueLabelCell.h; path = "KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYGroupIssueLabelCell.h"; sourceTree = SOURCE_ROOT; };
		4C670B4D1E5347C200281698 /* MYGroupIssueLabelCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MYGroupIssueLabelCell.m; path = "KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYGroupIssueLabelCell.m"; sourceTree = SOURCE_ROOT; };
		4C670B4F1E53483800281698 /* UIColor+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+Extension.h"; sourceTree = "<group>"; };
		4C670B501E53483800281698 /* UIColor+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Extension.m"; sourceTree = "<group>"; };
		4C670B511E53483800281698 /* UILabel+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UILabel+Extension.h"; sourceTree = "<group>"; };
		4C670B521E53483800281698 /* UILabel+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UILabel+Extension.m"; sourceTree = "<group>"; };
		4C670B551E53498200281698 /* NSString+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Extension.h"; sourceTree = "<group>"; };
		4C670B561E53498200281698 /* NSString+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Extension.m"; sourceTree = "<group>"; };
		4CCB2DD51D42714E007BAE45 /* KeepTabBarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepTabBarViewController.h; sourceTree = "<group>"; };
		4CCB2DD61D42714E007BAE45 /* KeepTabBarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepTabBarViewController.m; sourceTree = "<group>"; };
		4CCB2DD81D427188007BAE45 /* KeepNewFeatureViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KeepNewFeatureViewController.h; path = "KeepGuidePage/Main(主要)/Controller/KeepNewFeatureViewController.h"; sourceTree = SOURCE_ROOT; };
		4CCB2DD91D427188007BAE45 /* KeepNewFeatureViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = KeepNewFeatureViewController.m; path = "KeepGuidePage/Main(主要)/Controller/KeepNewFeatureViewController.m"; sourceTree = SOURCE_ROOT; };
		4CCB2DEB1D427676007BAE45 /* KeepNavigationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepNavigationViewController.h; sourceTree = "<group>"; };
		4CCB2DEC1D427676007BAE45 /* KeepNavigationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepNavigationViewController.m; sourceTree = "<group>"; };
		4CCB2DEE1D427705007BAE45 /* KeepTrainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepTrainViewController.h; sourceTree = "<group>"; };
		4CCB2DEF1D427705007BAE45 /* KeepTrainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepTrainViewController.m; sourceTree = "<group>"; };
		4CCB2DF11D427715007BAE45 /* KeepFindViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepFindViewController.h; sourceTree = "<group>"; };
		4CCB2DF21D427715007BAE45 /* KeepFindViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepFindViewController.m; sourceTree = "<group>"; };
		4CCB2DF41D427724007BAE45 /* KeepFollowViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepFollowViewController.h; sourceTree = "<group>"; };
		4CCB2DF51D427724007BAE45 /* KeepFollowViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepFollowViewController.m; sourceTree = "<group>"; };
		4CCB2DF71D427736007BAE45 /* KeepPersonalViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepPersonalViewController.h; sourceTree = "<group>"; };
		4CCB2DF81D427736007BAE45 /* KeepPersonalViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepPersonalViewController.m; sourceTree = "<group>"; };
		4CE9CDDD1D4B506E00132928 /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = "<group>"; };
		4CE9CDDE1D4B506E00132928 /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = "<group>"; };
		4CE9CDE01D4B508E00132928 /* RegisterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterViewController.h; sourceTree = "<group>"; };
		4CE9CDE11D4B508E00132928 /* RegisterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RegisterViewController.m; sourceTree = "<group>"; };
		4CE9CDE51D4B5E6200132928 /* UIBarButtonItem+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIBarButtonItem+Extension.h"; sourceTree = "<group>"; };
		4CE9CDE61D4B5E6200132928 /* UIBarButtonItem+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIBarButtonItem+Extension.m"; sourceTree = "<group>"; };
		4CE9CDE81D4B5E7800132928 /* UIView+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Extension.h"; sourceTree = "<group>"; };
		4CE9CDE91D4B5E7800132928 /* UIView+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Extension.m"; sourceTree = "<group>"; };
		4CE9CDEC1D4B5ED800132928 /* KeepCancelHighlightButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepCancelHighlightButton.h; sourceTree = "<group>"; };
		4CE9CDED1D4B5ED800132928 /* KeepCancelHighlightButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepCancelHighlightButton.m; sourceTree = "<group>"; };
		4CE9CDF01D4B608B00132928 /* Constant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constant.h; sourceTree = "<group>"; };
		4CE9CDF11D4B608B00132928 /* Constant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Constant.m; sourceTree = "<group>"; };
		4CFC68031D25082E00BD60F8 /* KeepGuidePage.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KeepGuidePage.app; sourceTree = BUILT_PRODUCTS_DIR; };
		4CFC68071D25082E00BD60F8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
		4CFC68091D25082E00BD60F8 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
		4CFC680A1D25082E00BD60F8 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
		4CFC68171D25082E00BD60F8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		4CFC681C1D25082F00BD60F8 /* KeepGuidePageTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KeepGuidePageTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
		4CFC68201D25082F00BD60F8 /* KeepGuidePageTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KeepGuidePageTests.m; sourceTree = "<group>"; };
		4CFC68221D25082F00BD60F8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		4CFC68271D25082F00BD60F8 /* KeepGuidePageUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KeepGuidePageUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
		4CFC682B1D25082F00BD60F8 /* KeepGuidePageUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KeepGuidePageUITests.m; sourceTree = "<group>"; };
		4CFC682D1D25082F00BD60F8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		4CFC68391D2508A700BD60F8 /* keep.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = keep.mp4; sourceTree = "<group>"; };
		4CFC683B1D251A7B00BD60F8 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
		4CFC68461D251C9E00BD60F8 /* KeepNewFeatrueView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepNewFeatrueView.h; sourceTree = "<group>"; };
		4CFC68471D251C9E00BD60F8 /* KeepNewFeatrueView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepNewFeatrueView.m; sourceTree = "<group>"; };
		4CFC68491D25258200BD60F8 /* KeepAdScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepAdScrollView.h; sourceTree = "<group>"; };
		4CFC684A1D25258200BD60F8 /* KeepAdScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepAdScrollView.m; sourceTree = "<group>"; };
		4CFC684C1D252B0C00BD60F8 /* KeepAdLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepAdLabel.h; sourceTree = "<group>"; };
		4CFC684D1D252B0C00BD60F8 /* KeepAdLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepAdLabel.m; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		4CFC68001D25082E00BD60F8 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		4CFC68191D25082F00BD60F8 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		4CFC68241D25082F00BD60F8 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		4C670B481E5346A600281698 /* MYCollectionViewStreamLineFlowLayout */ = {
			isa = PBXGroup;
			children = (
				4C670B491E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.h */,
				4C670B4A1E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.m */,
			);
			path = MYCollectionViewStreamLineFlowLayout;
			sourceTree = "<group>";
		};
		4CCB2DD21D42711C007BAE45 /* Main(主要) */ = {
			isa = PBXGroup;
			children = (
				4CCB2DD31D42711C007BAE45 /* Controller */,
				4CCB2DD41D42711C007BAE45 /* View */,
			);
			path = "Main(主要)";
			sourceTree = "<group>";
		};
		4CCB2DD31D42711C007BAE45 /* Controller */ = {
			isa = PBXGroup;
			children = (
				4CCB2DD51D42714E007BAE45 /* KeepTabBarViewController.h */,
				4CCB2DD61D42714E007BAE45 /* KeepTabBarViewController.m */,
				4CCB2DEB1D427676007BAE45 /* KeepNavigationViewController.h */,
				4CCB2DEC1D427676007BAE45 /* KeepNavigationViewController.m */,
			);
			path = Controller;
			sourceTree = "<group>";
		};
		4CCB2DD41D42711C007BAE45 /* View */ = {
			isa = PBXGroup;
			children = (
			);
			path = View;
			sourceTree = "<group>";
		};
		4CCB2DDB1D427337007BAE45 /* PersonalCenter(个人中心) */ = {
			isa = PBXGroup;
			children = (
				4CCB2DDC1D427337007BAE45 /* Controller */,
				4CCB2DDD1D427337007BAE45 /* Model */,
				4CCB2DDE1D427337007BAE45 /* View */,
			);
			path = "PersonalCenter(个人中心)";
			sourceTree = "<group>";
		};
		4CCB2DDC1D427337007BAE45 /* Controller */ = {
			isa = PBXGroup;
			children = (
				4CCB2DF71D427736007BAE45 /* KeepPersonalViewController.h */,
				4CCB2DF81D427736007BAE45 /* KeepPersonalViewController.m */,
			);
			path = Controller;
			sourceTree = "<group>";
		};
		4CCB2DDD1D427337007BAE45 /* Model */ = {
			isa = PBXGroup;
			children = (
			);
			path = Model;
			sourceTree = "<group>";
		};
		4CCB2DDE1D427337007BAE45 /* View */ = {
			isa = PBXGroup;
			children = (
			);
			path = View;
			sourceTree = "<group>";
		};
		4CCB2DDF1D427346007BAE45 /* Follow(关注) */ = {
			isa = PBXGroup;
			children = (
				4CCB2DE01D427346007BAE45 /* Controller */,
				4CCB2DE11D427346007BAE45 /* Model */,
				4CCB2DE21D427346007BAE45 /* View */,
			);
			path = "Follow(关注)";
			sourceTree = "<group>";
		};
		4CCB2DE01D427346007BAE45 /* Controller */ = {
			isa = PBXGroup;
			children = (
				4CCB2DF41D427724007BAE45 /* KeepFollowViewController.h */,
				4CCB2DF51D427724007BAE45 /* KeepFollowViewController.m */,
			);
			path = Controller;
			sourceTree = "<group>";
		};
		4CCB2DE11D427346007BAE45 /* Model */ = {
			isa = PBXGroup;
			children = (
			);
			path = Model;
			sourceTree = "<group>";
		};
		4CCB2DE21D427346007BAE45 /* View */ = {
			isa = PBXGroup;
			children = (
			);
			path = View;
			sourceTree = "<group>";
		};
		4CCB2DE31D42734D007BAE45 /* Find(发现) */ = {
			isa = PBXGroup;
			children = (
				4CCB2DE41D42734D007BAE45 /* Controller */,
				4CCB2DE51D42734D007BAE45 /* Model */,
				4CCB2DE61D42734D007BAE45 /* View */,
			);
			path = "Find(发现)";
			sourceTree = "<group>";
		};
		4CCB2DE41D42734D007BAE45 /* Controller */ = {
			isa = PBXGroup;
			children = (
				4CCB2DF11D427715007BAE45 /* KeepFindViewController.h */,
				4CCB2DF21D427715007BAE45 /* KeepFindViewController.m */,
			);
			path = Controller;
			sourceTree = "<group>";
		};
		4CCB2DE51D42734D007BAE45 /* Model */ = {
			isa = PBXGroup;
			children = (
			);
			path = Model;
			sourceTree = "<group>";
		};
		4CCB2DE61D42734D007BAE45 /* View */ = {
			isa = PBXGroup;
			children = (
				4C670B4C1E5347C200281698 /* MYGroupIssueLabelCell.h */,
				4C670B4D1E5347C200281698 /* MYGroupIssueLabelCell.m */,
			);
			path = View;
			sourceTree = "<group>";
		};
		4CCB2DE71D427353007BAE45 /* Train(训练) */ = {
			isa = PBXGroup;
			children = (
				4CCB2DE81D427353007BAE45 /* Controller */,
				4CCB2DE91D427353007BAE45 /* Model */,
				4CCB2DEA1D427353007BAE45 /* View */,
			);
			path = "Train(训练)";
			sourceTree = "<group>";
		};
		4CCB2DE81D427353007BAE45 /* Controller */ = {
			isa = PBXGroup;
			children = (
				4CCB2DEE1D427705007BAE45 /* KeepTrainViewController.h */,
				4CCB2DEF1D427705007BAE45 /* KeepTrainViewController.m */,
			);
			path = Controller;
			sourceTree = "<group>";
		};
		4CCB2DE91D427353007BAE45 /* Model */ = {
			isa = PBXGroup;
			children = (
			);
			path = Model;
			sourceTree = "<group>";
		};
		4CCB2DEA1D427353007BAE45 /* View */ = {
			isa = PBXGroup;
			children = (
			);
			path = View;
			sourceTree = "<group>";
		};
		4CE9CDD91D4B503C00132928 /* Account(账号) */ = {
			isa = PBXGroup;
			children = (
				4CE9CDDA1D4B503C00132928 /* Controller */,
				4CE9CDDB1D4B503C00132928 /* Model */,
				4CE9CDDC1D4B503C00132928 /* View */,
			);
			path = "Account(账号)";
			sourceTree = "<group>";
		};
		4CE9CDDA1D4B503C00132928 /* Controller */ = {
			isa = PBXGroup;
			children = (
				4CE9CDDD1D4B506E00132928 /* LoginViewController.h */,
				4CE9CDDE1D4B506E00132928 /* LoginViewController.m */,
				4CE9CDE01D4B508E00132928 /* RegisterViewController.h */,
				4CE9CDE11D4B508E00132928 /* RegisterViewController.m */,
			);
			path = Controller;
			sourceTree = "<group>";
		};
		4CE9CDDB1D4B503C00132928 /* Model */ = {
			isa = PBXGroup;
			children = (
			);
			path = Model;
			sourceTree = "<group>";
		};
		4CE9CDDC1D4B503C00132928 /* View */ = {
			isa = PBXGroup;
			children = (
			);
			path = View;
			sourceTree = "<group>";
		};
		4CE9CDE31D4B5E5700132928 /* Public(公共库) */ = {
			isa = PBXGroup;
			children = (
				4C670B481E5346A600281698 /* MYCollectionViewStreamLineFlowLayout */,
				4CE9CDEF1D4B607F00132928 /* Other */,
				4CE9CDEB1D4B5EBC00132928 /* CustomView */,
				4CE9CDE41D4B5E5700132928 /* Category */,
			);
			path = "Public(公共库)";
			sourceTree = "<group>";
		};
		4CE9CDE41D4B5E5700132928 /* Category */ = {
			isa = PBXGroup;
			children = (
				4CE9CDE51D4B5E6200132928 /* UIBarButtonItem+Extension.h */,
				4CE9CDE61D4B5E6200132928 /* UIBarButtonItem+Extension.m */,
				4CE9CDE81D4B5E7800132928 /* UIView+Extension.h */,
				4CE9CDE91D4B5E7800132928 /* UIView+Extension.m */,
				4C670B4F1E53483800281698 /* UIColor+Extension.h */,
				4C670B501E53483800281698 /* UIColor+Extension.m */,
				4C670B511E53483800281698 /* UILabel+Extension.h */,
				4C670B521E53483800281698 /* UILabel+Extension.m */,
				4C670B551E53498200281698 /* NSString+Extension.h */,
				4C670B561E53498200281698 /* NSString+Extension.m */,
			);
			path = Category;
			sourceTree = "<group>";
		};
		4CE9CDEB1D4B5EBC00132928 /* CustomView */ = {
			isa = PBXGroup;
			children = (
				4CE9CDEC1D4B5ED800132928 /* KeepCancelHighlightButton.h */,
				4CE9CDED1D4B5ED800132928 /* KeepCancelHighlightButton.m */,
			);
			path = CustomView;
			sourceTree = "<group>";
		};
		4CE9CDEF1D4B607F00132928 /* Other */ = {
			isa = PBXGroup;
			children = (
				4CE9CDF01D4B608B00132928 /* Constant.h */,
				4CE9CDF11D4B608B00132928 /* Constant.m */,
			);
			path = Other;
			sourceTree = "<group>";
		};
		4CFC67FA1D25082E00BD60F8 = {
			isa = PBXGroup;
			children = (
				4CFC68051D25082E00BD60F8 /* KeepGuidePage */,
				4CFC681F1D25082F00BD60F8 /* KeepGuidePageTests */,
				4CFC682A1D25082F00BD60F8 /* KeepGuidePageUITests */,
				4CFC68041D25082E00BD60F8 /* Products */,
			);
			sourceTree = "<group>";
		};
		4CFC68041D25082E00BD60F8 /* Products */ = {
			isa = PBXGroup;
			children = (
				4CFC68031D25082E00BD60F8 /* KeepGuidePage.app */,
				4CFC681C1D25082F00BD60F8 /* KeepGuidePageTests.xctest */,
				4CFC68271D25082F00BD60F8 /* KeepGuidePageUITests.xctest */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		4CFC68051D25082E00BD60F8 /* KeepGuidePage */ = {
			isa = PBXGroup;
			children = (
				4CE9CDE31D4B5E5700132928 /* Public(公共库) */,
				4CE9CDD91D4B503C00132928 /* Account(账号) */,
				4CCB2DE71D427353007BAE45 /* Train(训练) */,
				4CCB2DE31D42734D007BAE45 /* Find(发现) */,
				4CCB2DDF1D427346007BAE45 /* Follow(关注) */,
				4CCB2DDB1D427337007BAE45 /* PersonalCenter(个人中心) */,
				4CCB2DD21D42711C007BAE45 /* Main(主要) */,
				4CFC683D1D251BA200BD60F8 /* NewFeatrue(新特性) */,
				4CFC68091D25082E00BD60F8 /* AppDelegate.h */,
				4CFC680A1D25082E00BD60F8 /* AppDelegate.m */,
				4CFC68171D25082E00BD60F8 /* Info.plist */,
				4CFC683B1D251A7B00BD60F8 /* Images.xcassets */,
				4CFC68061D25082E00BD60F8 /* Supporting Files */,
			);
			path = KeepGuidePage;
			sourceTree = "<group>";
		};
		4CFC68061D25082E00BD60F8 /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				4CFC68391D2508A700BD60F8 /* keep.mp4 */,
				4CFC68071D25082E00BD60F8 /* main.m */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
		4CFC681F1D25082F00BD60F8 /* KeepGuidePageTests */ = {
			isa = PBXGroup;
			children = (
				4CFC68201D25082F00BD60F8 /* KeepGuidePageTests.m */,
				4CFC68221D25082F00BD60F8 /* Info.plist */,
			);
			path = KeepGuidePageTests;
			sourceTree = "<group>";
		};
		4CFC682A1D25082F00BD60F8 /* KeepGuidePageUITests */ = {
			isa = PBXGroup;
			children = (
				4CFC682B1D25082F00BD60F8 /* KeepGuidePageUITests.m */,
				4CFC682D1D25082F00BD60F8 /* Info.plist */,
			);
			path = KeepGuidePageUITests;
			sourceTree = "<group>";
		};
		4CFC683D1D251BA200BD60F8 /* NewFeatrue(新特性) */ = {
			isa = PBXGroup;
			children = (
				4CFC683E1D251BA200BD60F8 /* Controller */,
				4CFC68411D251BA200BD60F8 /* View */,
			);
			path = "NewFeatrue(新特性)";
			sourceTree = "<group>";
		};
		4CFC683E1D251BA200BD60F8 /* Controller */ = {
			isa = PBXGroup;
			children = (
				4CCB2DD81D427188007BAE45 /* KeepNewFeatureViewController.h */,
				4CCB2DD91D427188007BAE45 /* KeepNewFeatureViewController.m */,
			);
			path = Controller;
			sourceTree = "<group>";
		};
		4CFC68411D251BA200BD60F8 /* View */ = {
			isa = PBXGroup;
			children = (
				4CFC68461D251C9E00BD60F8 /* KeepNewFeatrueView.h */,
				4CFC68471D251C9E00BD60F8 /* KeepNewFeatrueView.m */,
				4CFC68491D25258200BD60F8 /* KeepAdScrollView.h */,
				4CFC684A1D25258200BD60F8 /* KeepAdScrollView.m */,
				4CFC684C1D252B0C00BD60F8 /* KeepAdLabel.h */,
				4CFC684D1D252B0C00BD60F8 /* KeepAdLabel.m */,
			);
			path = View;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		4CFC68021D25082E00BD60F8 /* KeepGuidePage */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 4CFC68301D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePage" */;
			buildPhases = (
				4CFC67FF1D25082E00BD60F8 /* Sources */,
				4CFC68001D25082E00BD60F8 /* Frameworks */,
				4CFC68011D25082E00BD60F8 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = KeepGuidePage;
			productName = KeepGuidePage;
			productReference = 4CFC68031D25082E00BD60F8 /* KeepGuidePage.app */;
			productType = "com.apple.product-type.application";
		};
		4CFC681B1D25082F00BD60F8 /* KeepGuidePageTests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 4CFC68331D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePageTests" */;
			buildPhases = (
				4CFC68181D25082F00BD60F8 /* Sources */,
				4CFC68191D25082F00BD60F8 /* Frameworks */,
				4CFC681A1D25082F00BD60F8 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				4CFC681E1D25082F00BD60F8 /* PBXTargetDependency */,
			);
			name = KeepGuidePageTests;
			productName = KeepGuidePageTests;
			productReference = 4CFC681C1D25082F00BD60F8 /* KeepGuidePageTests.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
		4CFC68261D25082F00BD60F8 /* KeepGuidePageUITests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 4CFC68361D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePageUITests" */;
			buildPhases = (
				4CFC68231D25082F00BD60F8 /* Sources */,
				4CFC68241D25082F00BD60F8 /* Frameworks */,
				4CFC68251D25082F00BD60F8 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				4CFC68291D25082F00BD60F8 /* PBXTargetDependency */,
			);
			name = KeepGuidePageUITests;
			productName = KeepGuidePageUITests;
			productReference = 4CFC68271D25082F00BD60F8 /* KeepGuidePageUITests.xctest */;
			productType = "com.apple.product-type.bundle.ui-testing";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		4CFC67FB1D25082E00BD60F8 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastUpgradeCheck = 0730;
				ORGANIZATIONNAME = com.51fanxing.KeepGuidePage;
				TargetAttributes = {
					4CFC68021D25082E00BD60F8 = {
						CreatedOnToolsVersion = 7.3.1;
					};
					4CFC681B1D25082F00BD60F8 = {
						CreatedOnToolsVersion = 7.3.1;
						TestTargetID = 4CFC68021D25082E00BD60F8;
					};
					4CFC68261D25082F00BD60F8 = {
						CreatedOnToolsVersion = 7.3.1;
						TestTargetID = 4CFC68021D25082E00BD60F8;
					};
				};
			};
			buildConfigurationList = 4CFC67FE1D25082E00BD60F8 /* Build configuration list for PBXProject "KeepGuidePage" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = English;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = 4CFC67FA1D25082E00BD60F8;
			productRefGroup = 4CFC68041D25082E00BD60F8 /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				4CFC68021D25082E00BD60F8 /* KeepGuidePage */,
				4CFC681B1D25082F00BD60F8 /* KeepGuidePageTests */,
				4CFC68261D25082F00BD60F8 /* KeepGuidePageUITests */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		4CFC68011D25082E00BD60F8 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				4CFC683C1D251A7B00BD60F8 /* Images.xcassets in Resources */,
				4CFC683A1D2508A700BD60F8 /* keep.mp4 in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		4CFC681A1D25082F00BD60F8 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		4CFC68251D25082F00BD60F8 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		4CFC67FF1D25082E00BD60F8 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				4CCB2DF01D427705007BAE45 /* KeepTrainViewController.m in Sources */,
				4CFC68481D251C9E00BD60F8 /* KeepNewFeatrueView.m in Sources */,
				4CE9CDDF1D4B506E00132928 /* LoginViewController.m in Sources */,
				4CFC684E1D252B0C00BD60F8 /* KeepAdLabel.m in Sources */,
				4CCB2DDA1D427188007BAE45 /* KeepNewFeatureViewController.m in Sources */,
				4CCB2DF31D427715007BAE45 /* KeepFindViewController.m in Sources */,
				4C670B4E1E5347C200281698 /* MYGroupIssueLabelCell.m in Sources */,
				4CFC680B1D25082E00BD60F8 /* AppDelegate.m in Sources */,
				4CE9CDF21D4B608B00132928 /* Constant.m in Sources */,
				4CFC684B1D25258200BD60F8 /* KeepAdScrollView.m in Sources */,
				4C670B541E53483800281698 /* UILabel+Extension.m in Sources */,
				4C670B531E53483800281698 /* UIColor+Extension.m in Sources */,
				4CCB2DF91D427736007BAE45 /* KeepPersonalViewController.m in Sources */,
				4C670B571E53498200281698 /* NSString+Extension.m in Sources */,
				4CE9CDE71D4B5E6200132928 /* UIBarButtonItem+Extension.m in Sources */,
				4CCB2DED1D427676007BAE45 /* KeepNavigationViewController.m in Sources */,
				4CFC68081D25082E00BD60F8 /* main.m in Sources */,
				4CE9CDE21D4B508E00132928 /* RegisterViewController.m in Sources */,
				4CCB2DD71D42714E007BAE45 /* KeepTabBarViewController.m in Sources */,
				4CE9CDEA1D4B5E7800132928 /* UIView+Extension.m in Sources */,
				4CE9CDEE1D4B5ED800132928 /* KeepCancelHighlightButton.m in Sources */,
				4CCB2DF61D427724007BAE45 /* KeepFollowViewController.m in Sources */,
				4C670B4B1E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		4CFC68181D25082F00BD60F8 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				4CFC68211D25082F00BD60F8 /* KeepGuidePageTests.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		4CFC68231D25082F00BD60F8 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				4CFC682C1D25082F00BD60F8 /* KeepGuidePageUITests.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
		4CFC681E1D25082F00BD60F8 /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = 4CFC68021D25082E00BD60F8 /* KeepGuidePage */;
			targetProxy = 4CFC681D1D25082F00BD60F8 /* PBXContainerItemProxy */;
		};
		4CFC68291D25082F00BD60F8 /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = 4CFC68021D25082E00BD60F8 /* KeepGuidePage */;
			targetProxy = 4CFC68281D25082F00BD60F8 /* PBXContainerItemProxy */;
		};
/* End PBXTargetDependency section */

/* Begin XCBuildConfiguration section */
		4CFC682E1D25082F00BD60F8 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = dwarf;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 9.3;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Debug;
		};
		4CFC682F1D25082F00BD60F8 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 9.3;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		4CFC68311D25082F00BD60F8 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "Brand Assets";
				INFOPLIST_FILE = KeepGuidePage/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.FXBEST;
				PRODUCT_NAME = "$(TARGET_NAME)";
			};
			name = Debug;
		};
		4CFC68321D25082F00BD60F8 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "Brand Assets";
				INFOPLIST_FILE = KeepGuidePage/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.FXBEST;
				PRODUCT_NAME = "$(TARGET_NAME)";
			};
			name = Release;
		};
		4CFC68341D25082F00BD60F8 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				BUNDLE_LOADER = "$(TEST_HOST)";
				INFOPLIST_FILE = KeepGuidePageTests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.KeepGuidePageTests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KeepGuidePage.app/KeepGuidePage";
			};
			name = Debug;
		};
		4CFC68351D25082F00BD60F8 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				BUNDLE_LOADER = "$(TEST_HOST)";
				INFOPLIST_FILE = KeepGuidePageTests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.KeepGuidePageTests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KeepGuidePage.app/KeepGuidePage";
			};
			name = Release;
		};
		4CFC68371D25082F00BD60F8 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				INFOPLIST_FILE = KeepGuidePageUITests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.KeepGuidePageUITests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				TEST_TARGET_NAME = KeepGuidePage;
			};
			name = Debug;
		};
		4CFC68381D25082F00BD60F8 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				INFOPLIST_FILE = KeepGuidePageUITests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.KeepGuidePageUITests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				TEST_TARGET_NAME = KeepGuidePage;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		4CFC67FE1D25082E00BD60F8 /* Build configuration list for PBXProject "KeepGuidePage" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				4CFC682E1D25082F00BD60F8 /* Debug */,
				4CFC682F1D25082F00BD60F8 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		4CFC68301D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePage" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				4CFC68311D25082F00BD60F8 /* Debug */,
				4CFC68321D25082F00BD60F8 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		4CFC68331D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePageTests" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				4CFC68341D25082F00BD60F8 /* Debug */,
				4CFC68351D25082F00BD60F8 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		4CFC68361D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePageUITests" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				4CFC68371D25082F00BD60F8 /* Debug */,
				4CFC68381D25082F00BD60F8 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 4CFC67FB1D25082E00BD60F8 /* Project object */;
}


================================================
FILE: KeepGuidePage.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:KeepGuidePage.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: KeepGuidePage.xcodeproj/xcshareddata/xcschemes/KeepGuidePage.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "0730"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "4CFC68021D25082E00BD60F8"
               BuildableName = "KeepGuidePage.app"
               BlueprintName = "KeepGuidePage"
               ReferencedContainer = "container:KeepGuidePage.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      language = ""
      shouldUseLaunchSchemeArgsEnv = "YES">
      <Testables>
         <TestableReference
            skipped = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "4CFC681B1D25082F00BD60F8"
               BuildableName = "KeepGuidePageTests.xctest"
               BlueprintName = "KeepGuidePageTests"
               ReferencedContainer = "container:KeepGuidePage.xcodeproj">
            </BuildableReference>
         </TestableReference>
         <TestableReference
            skipped = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "4CFC68261D25082F00BD60F8"
               BuildableName = "KeepGuidePageUITests.xctest"
               BlueprintName = "KeepGuidePageUITests"
               ReferencedContainer = "container:KeepGuidePage.xcodeproj">
            </BuildableReference>
         </TestableReference>
      </Testables>
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "4CFC68021D25082E00BD60F8"
            BuildableName = "KeepGuidePage.app"
            BlueprintName = "KeepGuidePage"
            ReferencedContainer = "container:KeepGuidePage.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <AdditionalOptions>
      </AdditionalOptions>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      language = ""
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "4CFC68021D25082E00BD60F8"
            BuildableName = "KeepGuidePage.app"
            BlueprintName = "KeepGuidePage"
            ReferencedContainer = "container:KeepGuidePage.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Release"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "4CFC68021D25082E00BD60F8"
            BuildableName = "KeepGuidePage.app"
            BlueprintName = "KeepGuidePage"
            ReferencedContainer = "container:KeepGuidePage.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: KeepGuidePageTests/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>BNDL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>1</string>
</dict>
</plist>


================================================
FILE: KeepGuidePageTests/KeepGuidePageTests.m
================================================
//
//  KeepGuidePageTests.m
//  KeepGuidePageTests
//
//  Created by Michael on 16/6/30.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <XCTest/XCTest.h>

@interface KeepGuidePageTests : XCTestCase

@end

@implementation KeepGuidePageTests

- (void)setUp {
    [super setUp];
    // Put setup code here. This method is called before the invocation of each test method in the class.
}

- (void)tearDown {
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    [super tearDown];
}

- (void)testExample {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
}

- (void)testPerformanceExample {
    // This is an example of a performance test case.
    [self measureBlock:^{
        // Put the code you want to measure the time of here.
    }];
}

@end


================================================
FILE: KeepGuidePageUITests/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>BNDL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>1</string>
</dict>
</plist>


================================================
FILE: KeepGuidePageUITests/KeepGuidePageUITests.m
================================================
//
//  KeepGuidePageUITests.m
//  KeepGuidePageUITests
//
//  Created by Michael on 16/6/30.
//  Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved.
//

#import <XCTest/XCTest.h>

@interface KeepGuidePageUITests : XCTestCase

@end

@implementation KeepGuidePageUITests

- (void)setUp {
    [super setUp];
    
    // Put setup code here. This method is called before the invocation of each test method in the class.
    
    // In UI tests it is usually best to stop immediately when a failure occurs.
    self.continueAfterFailure = NO;
    // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
    [[[XCUIApplication alloc] init] launch];
    
    // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
}

- (void)tearDown {
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    [super tearDown];
}

- (void)testExample {
    // Use recording to get started writing UI tests.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
}

@end


================================================
FILE: README.md
================================================
# 仿KEEP引导页

<p align='left'>
<img src="https://img.shields.io/badge/build-passing-brightgreen.svg">
<img src="https://img.shields.io/badge/platform-iOS-ff69b4.svg">
<img src="https://img.shields.io/badge/language-Objective--C-orange.svg">
</p>

![效果图](https://github.com/sunjinshuai/Keep/blob/master/Keep.gif)



Download .txt
gitextract_3whcw96j/

├── .gitignore
├── .travis.yml
├── KeepGuidePage/
│   ├── Account(账号)/
│   │   └── Controller/
│   │       ├── LoginViewController.h
│   │       ├── LoginViewController.m
│   │       ├── RegisterViewController.h
│   │       └── RegisterViewController.m
│   ├── AppDelegate.h
│   ├── AppDelegate.m
│   ├── Find(发现)/
│   │   └── Controller/
│   │       ├── KeepFindViewController.h
│   │       └── KeepFindViewController.m
│   ├── Follow(关注)/
│   │   └── Controller/
│   │       ├── KeepFollowViewController.h
│   │       └── KeepFollowViewController.m
│   ├── Images.xcassets/
│   │   ├── 3DTouch/
│   │   │   ├── .svn/
│   │   │   │   ├── all-wcprops
│   │   │   │   ├── entries
│   │   │   │   └── text-base/
│   │   │   │       └── Contents.json.svn-base
│   │   │   ├── Contents.json
│   │   │   ├── fx_3DTouch_AdorableStar.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── fx_3DTouch_Receipt_of_goods.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── fx_3DTouch_Search_brand.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── fx_3DTouch_Star_Ticket.imageset/
│   │   │       └── Contents.json
│   │   ├── Account/
│   │   │   ├── Contents.json
│   │   │   ├── qq.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── qq_light.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── wechat.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── wechat_light.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── weico.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── weico_light.imageset/
│   │   │       └── Contents.json
│   │   ├── AppIcon.appiconset/
│   │   │   └── Contents.json
│   │   ├── Brand Assets.launchimage/
│   │   │   └── Contents.json
│   │   ├── Contents.json
│   │   ├── Find/
│   │   │   ├── Contents.json
│   │   │   ├── discovery.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── discovery_on.imageset/
│   │   │       └── Contents.json
│   │   ├── Follow/
│   │   │   ├── Contents.json
│   │   │   ├── trends.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── trends_on.imageset/
│   │   │       └── Contents.json
│   │   ├── Navigation/
│   │   │   ├── Contents.json
│   │   │   ├── back.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── backbtn.imageset/
│   │   │       └── Contents.json
│   │   ├── NewFeature/
│   │   │   ├── Contents.json
│   │   │   └── keep.imageset/
│   │   │       └── Contents.json
│   │   ├── PersonalCenter/
│   │   │   ├── Contents.json
│   │   │   ├── personal.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── personal_on.imageset/
│   │   │       └── Contents.json
│   │   └── Train/
│   │       ├── Contents.json
│   │       ├── train.imageset/
│   │       │   └── Contents.json
│   │       └── train_on.imageset/
│   │           └── Contents.json
│   ├── Info.plist
│   ├── Main(主要)/
│   │   └── Controller/
│   │       ├── KeepNavigationViewController.h
│   │       ├── KeepNavigationViewController.m
│   │       ├── KeepNewFeatureViewController.h
│   │       ├── KeepNewFeatureViewController.m
│   │       ├── KeepTabBarViewController.h
│   │       └── KeepTabBarViewController.m
│   ├── NewFeatrue(新特性)/
│   │   └── View/
│   │       ├── KeepAdLabel.h
│   │       ├── KeepAdLabel.m
│   │       ├── KeepAdScrollView.h
│   │       ├── KeepAdScrollView.m
│   │       ├── KeepNewFeatrueView.h
│   │       └── KeepNewFeatrueView.m
│   ├── PersonalCenter(个人中心)/
│   │   └── Controller/
│   │       ├── KeepPersonalViewController.h
│   │       └── KeepPersonalViewController.m
│   ├── Public(公共库)/
│   │   ├── Category/
│   │   │   ├── NSString+Extension.h
│   │   │   ├── NSString+Extension.m
│   │   │   ├── UIBarButtonItem+Extension.h
│   │   │   ├── UIBarButtonItem+Extension.m
│   │   │   ├── UIColor+Extension.h
│   │   │   ├── UIColor+Extension.m
│   │   │   ├── UILabel+Extension.h
│   │   │   ├── UILabel+Extension.m
│   │   │   ├── UIView+Extension.h
│   │   │   └── UIView+Extension.m
│   │   ├── CustomView/
│   │   │   ├── KeepCancelHighlightButton.h
│   │   │   └── KeepCancelHighlightButton.m
│   │   ├── MYCollectionViewStreamLineFlowLayout/
│   │   │   ├── MYCollectionViewStreamLineFlowLayout.h
│   │   │   ├── MYCollectionViewStreamLineFlowLayout.m
│   │   │   ├── MYGroupIssueLabelCell.h
│   │   │   └── MYGroupIssueLabelCell.m
│   │   └── Other/
│   │       ├── Constant.h
│   │       └── Constant.m
│   ├── Train(训练)/
│   │   └── Controller/
│   │       ├── KeepTrainViewController.h
│   │       └── KeepTrainViewController.m
│   └── main.m
├── KeepGuidePage.xcodeproj/
│   ├── project.pbxproj
│   ├── project.xcworkspace/
│   │   └── contents.xcworkspacedata
│   └── xcshareddata/
│       └── xcschemes/
│           └── KeepGuidePage.xcscheme
├── KeepGuidePageTests/
│   ├── Info.plist
│   └── KeepGuidePageTests.m
├── KeepGuidePageUITests/
│   ├── Info.plist
│   └── KeepGuidePageUITests.m
└── README.md
Condensed preview — 91 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (130K chars).
[
  {
    "path": ".gitignore",
    "chars": 1422,
    "preview": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n"
  },
  {
    "path": ".travis.yml",
    "chars": 224,
    "preview": "osx_image: xcode9\nlanguage: objective-c\n\nenv:\n  global:\n    - LANG=en_US.UTF-8\n    - LC_ALL=en_US.UTF-8\n    - XCODE_PROJ"
  },
  {
    "path": "KeepGuidePage/Account(账号)/Controller/LoginViewController.h",
    "chars": 242,
    "preview": "//\n//  LoginViewController.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/29.\n//  Copyright © 2016年 com.51fanxing"
  },
  {
    "path": "KeepGuidePage/Account(账号)/Controller/LoginViewController.m",
    "chars": 1122,
    "preview": "//\n//  LoginViewController.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/29.\n//  Copyright © 2016年 com.51fanxing"
  },
  {
    "path": "KeepGuidePage/Account(账号)/Controller/RegisterViewController.h",
    "chars": 248,
    "preview": "//\n//  RegisterViewController.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/29.\n//  Copyright © 2016年 com.51fanx"
  },
  {
    "path": "KeepGuidePage/Account(账号)/Controller/RegisterViewController.m",
    "chars": 1074,
    "preview": "//\n//  RegisterViewController.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/29.\n//  Copyright © 2016年 com.51fanx"
  },
  {
    "path": "KeepGuidePage/AppDelegate.h",
    "chars": 296,
    "preview": "//\n//  AppDelegate.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/6/30.\n//  Copyright © 2016年 com.51fanxing.KeepGui"
  },
  {
    "path": "KeepGuidePage/AppDelegate.m",
    "chars": 5105,
    "preview": "//\n//  AppDelegate.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/6/30.\n//  Copyright © 2016年 com.51fanxing.KeepGui"
  },
  {
    "path": "KeepGuidePage/Find(发现)/Controller/KeepFindViewController.h",
    "chars": 248,
    "preview": "//\n//  KeepFindViewController.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com.51fanx"
  },
  {
    "path": "KeepGuidePage/Find(发现)/Controller/KeepFindViewController.m",
    "chars": 3096,
    "preview": "//\n//  KeepFindViewController.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com.51fanx"
  },
  {
    "path": "KeepGuidePage/Follow(关注)/Controller/KeepFollowViewController.h",
    "chars": 252,
    "preview": "//\n//  KeepFollowViewController.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com.51fa"
  },
  {
    "path": "KeepGuidePage/Follow(关注)/Controller/KeepFollowViewController.m",
    "chars": 877,
    "preview": "//\n//  KeepFollowViewController.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com.51fa"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/3DTouch/.svn/all-wcprops",
    "chars": 344,
    "preview": "K 25\nsvn:wc:ra_dav:version-url\nV 116\n/svn/FXBest/!svn/ver/12661/05%20%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0/IOS/trunk/FXBE"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/3DTouch/.svn/entries",
    "chars": 601,
    "preview": "10\n\ndir\n12661\nhttps://michael@192.168.1.11:443/svn/FXBest/05%20%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0/IOS/trunk/FXBEST/FXB"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/3DTouch/.svn/text-base/Contents.json.svn-base",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/3DTouch/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_AdorableStar.imageset/Contents.json",
    "chars": 376,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Receipt_of_goods.imageset/Contents.json",
    "chars": 384,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Search_brand.imageset/Contents.json",
    "chars": 376,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Star_Ticket.imageset/Contents.json",
    "chars": 374,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Account/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Account/qq.imageset/Contents.json",
    "chars": 363,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"qq.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n     "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Account/qq_light.imageset/Contents.json",
    "chars": 381,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"qq_light.png\",\n      \"scale\" : \"1x\"\n    },\n    {"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Account/wechat.imageset/Contents.json",
    "chars": 375,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"wechat.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Account/wechat_light.imageset/Contents.json",
    "chars": 393,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"wechat_light.png\",\n      \"scale\" : \"1x\"\n    },\n "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Account/weico.imageset/Contents.json",
    "chars": 372,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"weico.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n  "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Account/weico_light.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"weico_light.png\",\n      \"scale\" : \"1x\"\n    },\n  "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 837,
    "preview": "{\n  \"images\" : [\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"AppIcon29x29@2x.png\",\n     "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Brand Assets.launchimage/Contents.json",
    "chars": 1030,
    "preview": "{\n  \"images\" : [\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"736h\",\n      \"filena"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Find/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Find/discovery.imageset/Contents.json",
    "chars": 384,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"discovery.png\",\n      \"scale\" : \"1x\"\n    },\n    "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Find/discovery_on.imageset/Contents.json",
    "chars": 393,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"discovery_on.png\",\n      \"scale\" : \"1x\"\n    },\n "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Follow/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Follow/trends.imageset/Contents.json",
    "chars": 375,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"trends.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Follow/trends_on.imageset/Contents.json",
    "chars": 384,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"trends_on.png\",\n      \"scale\" : \"1x\"\n    },\n    "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Navigation/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Navigation/back.imageset/Contents.json",
    "chars": 369,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"back.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n   "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Navigation/backbtn.imageset/Contents.json",
    "chars": 378,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"backbtn.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/NewFeature/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/NewFeature/keep.imageset/Contents.json",
    "chars": 376,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"keep6.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n  "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/PersonalCenter/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/PersonalCenter/personal.imageset/Contents.json",
    "chars": 381,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"personal.png\",\n      \"scale\" : \"1x\"\n    },\n    {"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/PersonalCenter/personal_on.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"personal_on.png\",\n      \"scale\" : \"1x\"\n    },\n  "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Train/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Train/train.imageset/Contents.json",
    "chars": 372,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"train.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n  "
  },
  {
    "path": "KeepGuidePage/Images.xcassets/Train/train_on.imageset/Contents.json",
    "chars": 381,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"train_on.png\",\n      \"scale\" : \"1x\"\n    },\n    {"
  },
  {
    "path": "KeepGuidePage/Info.plist",
    "chars": 1437,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "KeepGuidePage/Main(主要)/Controller/KeepNavigationViewController.h",
    "chars": 266,
    "preview": "//\n//  KeepNavigationViewController.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com."
  },
  {
    "path": "KeepGuidePage/Main(主要)/Controller/KeepNavigationViewController.m",
    "chars": 1926,
    "preview": "//\n//  KeepNavigationViewController.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com."
  },
  {
    "path": "KeepGuidePage/Main(主要)/Controller/KeepNewFeatureViewController.h",
    "chars": 260,
    "preview": "//\n//  KeepNewFeatureViewController.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com."
  },
  {
    "path": "KeepGuidePage/Main(主要)/Controller/KeepNewFeatureViewController.m",
    "chars": 3300,
    "preview": "//\n//  KeepNewFeatureViewController.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com."
  },
  {
    "path": "KeepGuidePage/Main(主要)/Controller/KeepTabBarViewController.h",
    "chars": 254,
    "preview": "//\n//  KeepTabBarViewController.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com.51fa"
  },
  {
    "path": "KeepGuidePage/Main(主要)/Controller/KeepTabBarViewController.m",
    "chars": 2612,
    "preview": "//\n//  KeepTabBarViewController.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com.51fa"
  },
  {
    "path": "KeepGuidePage/NewFeatrue(新特性)/View/KeepAdLabel.h",
    "chars": 217,
    "preview": "//\n//  KeepAdLabel.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/6/30.\n//  Copyright © 2016年 com.51fanxing.KeepGui"
  },
  {
    "path": "KeepGuidePage/NewFeatrue(新特性)/View/KeepAdLabel.m",
    "chars": 504,
    "preview": "//\n//  KeepAdLabel.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/6/30.\n//  Copyright © 2016年 com.51fanxing.KeepGui"
  },
  {
    "path": "KeepGuidePage/NewFeatrue(新特性)/View/KeepAdScrollView.h",
    "chars": 338,
    "preview": "//\n//  KeepAdScrollView.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/6/30.\n//  Copyright © 2016年 com.51fanxing.Ke"
  },
  {
    "path": "KeepGuidePage/NewFeatrue(新特性)/View/KeepAdScrollView.m",
    "chars": 3869,
    "preview": "//\n//  KeepAdScrollView.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/6/30.\n//  Copyright © 2016年 com.51fanxing.Ke"
  },
  {
    "path": "KeepGuidePage/NewFeatrue(新特性)/View/KeepNewFeatrueView.h",
    "chars": 652,
    "preview": "//\n//  KeepNewFeatrueView.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/6/30.\n//  Copyright © 2016年 com.51fanxing."
  },
  {
    "path": "KeepGuidePage/NewFeatrue(新特性)/View/KeepNewFeatrueView.m",
    "chars": 4599,
    "preview": "//\n//  KeepNewFeatrueView.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/6/30.\n//  Copyright © 2016年 com.51fanxing."
  },
  {
    "path": "KeepGuidePage/PersonalCenter(个人中心)/Controller/KeepPersonalViewController.h",
    "chars": 256,
    "preview": "//\n//  KeepPersonalViewController.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com.51"
  },
  {
    "path": "KeepGuidePage/PersonalCenter(个人中心)/Controller/KeepPersonalViewController.m",
    "chars": 885,
    "preview": "//\n//  KeepPersonalViewController.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com.51"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Category/NSString+Extension.h",
    "chars": 554,
    "preview": "//\n//  NSString+Extension.h\n//  KeepGuidePage\n//\n//  Created by Michael on 2017/2/14.\n//  Copyright © 2017年 com.51fanxin"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Category/NSString+Extension.m",
    "chars": 1310,
    "preview": "//\n//  NSString+Extension.m\n//  KeepGuidePage\n//\n//  Created by Michael on 2017/2/14.\n//  Copyright © 2017年 com.51fanxin"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Category/UIBarButtonItem+Extension.h",
    "chars": 581,
    "preview": "//\n//  UIBarButtonItem+Extension.h\n//  LdleFishGuidePage\n//\n//  Created by Michael on 16/7/26.\n//  Copyright © 2016年 com"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Category/UIBarButtonItem+Extension.m",
    "chars": 1557,
    "preview": "//\n//  UIBarButtonItem+Extension.m\n//  LdleFishGuidePage\n//\n//  Created by Michael on 16/7/26.\n//  Copyright © 2016年 com"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Category/UIColor+Extension.h",
    "chars": 262,
    "preview": "//\n//  UIColor+Extension.h\n//  MYAlertView\n//\n//  Created by Michael on 2017/2/14.\n//  Copyright © 2017年 com.chinabiddin"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Category/UIColor+Extension.m",
    "chars": 1555,
    "preview": "//\n//  UIColor+Extension.m\n//  MYAlertView\n//\n//  Created by Michael on 2017/2/14.\n//  Copyright © 2017年 com.chinabiddin"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Category/UILabel+Extension.h",
    "chars": 248,
    "preview": "//\n//  UILabel+Extension.h\n//  MYAlertView\n//\n//  Created by Michael on 2017/2/14.\n//  Copyright © 2017年 com.chinabiddin"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Category/UILabel+Extension.m",
    "chars": 430,
    "preview": "//\n//  UILabel+Extension.m\n//  MYAlertView\n//\n//  Created by Michael on 2017/2/14.\n//  Copyright © 2017年 com.chinabiddin"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Category/UIView+Extension.h",
    "chars": 729,
    "preview": "//\n//  UIView+Extension.h\n//  FXBEST\n//\n//  Created by fanxing on 16/6/16.\n//  Copyright © 2016年 51fanxing. All rights r"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Category/UIView+Extension.m",
    "chars": 2333,
    "preview": "//\n//  UIView+Extension.m\n//  FXBEST\n//\n//  Created by fanxing on 16/6/16.\n//  Copyright © 2016年 51fanxing. All rights r"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/CustomView/KeepCancelHighlightButton.h",
    "chars": 246,
    "preview": "//\n//  KeepCancelHighlightButton.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/29.\n//  Copyright © 2016年 com.51f"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/CustomView/KeepCancelHighlightButton.m",
    "chars": 305,
    "preview": "//\n//  KeepCancelHighlightButton.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/29.\n//  Copyright © 2016年 com.51f"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYCollectionViewStreamLineFlowLayout.h",
    "chars": 288,
    "preview": "//\n//  MYCollectionViewStreamLineFlowLayout.h\n//  KeepGuidePage\n//\n//  Created by Michael on 2017/2/14.\n//  Copyright © "
  },
  {
    "path": "KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYCollectionViewStreamLineFlowLayout.m",
    "chars": 1170,
    "preview": "//\n//  MYCollectionViewStreamLineFlowLayout.m\n//  KeepGuidePage\n//\n//  Created by Michael on 2017/2/14.\n//  Copyright © "
  },
  {
    "path": "KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYGroupIssueLabelCell.h",
    "chars": 305,
    "preview": "//\n//  MYGroupIssueLabelCell.h\n//  KeepGuidePage\n//\n//  Created by Michael on 2017/2/14.\n//  Copyright © 2017年 com.51fan"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYGroupIssueLabelCell.m",
    "chars": 1855,
    "preview": "//\n//  MYGroupIssueLabelCell.m\n//  KeepGuidePage\n//\n//  Created by Michael on 2017/2/14.\n//  Copyright © 2017年 com.51fan"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Other/Constant.h",
    "chars": 802,
    "preview": "//\n//  Constant.h\n//  LdleFishGuidePage\n//\n//  Created by Michael on 16/7/26.\n//  Copyright © 2016年 com.51fanxing.search"
  },
  {
    "path": "KeepGuidePage/Public(公共库)/Other/Constant.m",
    "chars": 178,
    "preview": "//\n//  Constant.m\n//  LdleFishGuidePage\n//\n//  Created by Michael on 16/7/26.\n//  Copyright © 2016年 com.51fanxing.search"
  },
  {
    "path": "KeepGuidePage/Train(训练)/Controller/KeepTrainViewController.h",
    "chars": 250,
    "preview": "//\n//  KeepTrainViewController.h\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com.51fan"
  },
  {
    "path": "KeepGuidePage/Train(训练)/Controller/KeepTrainViewController.m",
    "chars": 873,
    "preview": "//\n//  KeepTrainViewController.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/7/22.\n//  Copyright © 2016年 com.51fan"
  },
  {
    "path": "KeepGuidePage/main.m",
    "chars": 353,
    "preview": "//\n//  main.m\n//  KeepGuidePage\n//\n//  Created by Michael on 16/6/30.\n//  Copyright © 2016年 com.51fanxing.KeepGuidePage."
  },
  {
    "path": "KeepGuidePage.xcodeproj/project.pbxproj",
    "chars": 40955,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "KeepGuidePage.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 158,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:KeepGuidePage.x"
  },
  {
    "path": "KeepGuidePage.xcodeproj/xcshareddata/xcschemes/KeepGuidePage.xcscheme",
    "chars": 4315,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0730\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "KeepGuidePageTests/Info.plist",
    "chars": 733,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "KeepGuidePageTests/KeepGuidePageTests.m",
    "chars": 936,
    "preview": "//\n//  KeepGuidePageTests.m\n//  KeepGuidePageTests\n//\n//  Created by Michael on 16/6/30.\n//  Copyright © 2016年 com.51fan"
  },
  {
    "path": "KeepGuidePageUITests/Info.plist",
    "chars": 733,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "KeepGuidePageUITests/KeepGuidePageUITests.m",
    "chars": 1243,
    "preview": "//\n//  KeepGuidePageUITests.m\n//  KeepGuidePageUITests\n//\n//  Created by Michael on 16/6/30.\n//  Copyright © 2016年 com.5"
  },
  {
    "path": "README.md",
    "chars": 313,
    "preview": "# 仿KEEP引导页\n\n<p align='left'>\n<img src=\"https://img.shields.io/badge/build-passing-brightgreen.svg\">\n<img src=\"https://im"
  }
]

About this extraction

This page contains the full source code of the sunjinshuai/KeepGuidePage GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 91 files (109.9 KB), approximately 37.5k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!