1. 程式人生 > >貓貓學iOS 之微博項目實戰(7)程序啟動新特性用UICollectionViewController實現

貓貓學iOS 之微博項目實戰(7)程序啟動新特性用UICollectionViewController實現

num warning art asc enter 部分 setimage 版本號 back

貓貓分享。必須精品

原創文章。歡迎轉載。轉載請註明:翟乃玉的博客
地址:http://blog.csdn.net/u013357243

一:效果

這裏實現了大多數app都會有的軟件新特性的功能,用的是UICollectionViewController實現的
技術分享

二:思路

這裏用了UICollectionViewController實現,就是做一個沒有間隙,每一個cell都是一個屏幕的UICollectionViewController,自己定義的。

然後把以下的UIPageControl 還有最後一頁的開始以及分享button放入就OK了。

調用的時候。首先獲取當前的app的版本號號。然後再獲取上一個版本號。

進行兩個版本號的比較。

當前版本號和上一個版本號不同。當前版本號是從infoDictionary中拿到的,上一個版本號是從自己存的NSUserDefaults 中的NYVersionKey拿到的,而且蘋果同意上傳小於當前版本號的app。假設是第一個版本號時候。上一個版本號還沒有值,也會不同。


依據結果設置window的不同根控制器。

自己定義UICollectionViewController步驟:
要註意:
1.初始化的時候設置布局參數
2.collertionView必須註冊cell
3.自己定義cell

三:代碼

調用部分代碼:AppDelegate

 //1,獲取當前的版本號號
NSString *currentVersion = [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"]; //2。獲取上一次的版本號號 NSString *lastVersion = [[NSUserDefaults standardUserDefaults]objectForKey:NYVersionKey]; NYLog(@"currentVersion == %@ , lastVersion == %@ ",currentVersion, lastVersion); //推斷是否有新的版本號
if ([currentVersion isEqualToString:lastVersion]) { //假設沒有新的版本號(當前版本號和上一個版本號不同,當前版本號是從infoDictionary中拿到的,上一個版本號是從自己存的NSUserDefaults 中的NYVersionKey拿到的,而且蘋果同意上傳小於當前版本號的app,假設是第一個版本號時候,上一個版本號還沒有值,也會不同。) //創建tabBarVC NYTabBarController *tabBarVC = [[NYTabBarController alloc]init]; //設置窗體跟控制器 self.window.rootViewController = tabBarVC; }else{//假設有新的版本號 //進入新特性界面 NYNewFeatureController *newFeatureVC = [[NYNewFeatureController alloc]init]; newFeatureVC.view.backgroundColor = [UIColor redColor]; self.window.rootViewController = newFeatureVC; //用偏好設置,保存當前版本號。

[[NSUserDefaults standardUserDefaults]setObject:currentVersion forKey:NYVersionKey]; }


自己定義的collectionViewController

NYNewFeatureController.m

//
//  NYNewFeatureController.m
//  貓貓微博
//
//  Created by apple on 15-8-1.
//  Copyright (c) 2015年 znycat. All rights reserved.
//

#import "NYNewFeatureController.h"
#import "NYNewFeatureCell.h"


@interface NYNewFeatureController ()

@property (nonatomic, weak) UIPageControl *control;

@end

@implementation NYNewFeatureController

static NSString * const reuseIdentifier = @"cell";

- (void)viewDidLoad {
    [super viewDidLoad];

    //註冊cell。默認就會創建這個類型的cell
    [self.collectionView registerClass:[NYNewFeatureCell class] forCellWithReuseIdentifier:reuseIdentifier];

    //分頁
    self.collectionView.pagingEnabled = YES;
    //取消彈簧效果
    self.collectionView.bounces = NO;
    //不顯示滾動欄
    self.collectionView.showsHorizontalScrollIndicator = NO;

    // 加入pageController
    [self setUpPageControl];
    // Do any additional setup after loading the view.
}
// 加入pageController
- (void)setUpPageControl
{
    // 加入pageController,僅僅須要設置位置。不須要管理尺寸
    UIPageControl *control = [[UIPageControl alloc] init];

    control.numberOfPages = 4;
    control.pageIndicatorTintColor = [UIColor blackColor];
    control.currentPageIndicatorTintColor = [UIColor redColor];

    // 設置center
    control.center = CGPointMake(self.view.width * 0.5, self.view.height);
    _control = control;
    [self.view addSubview:control];
}

/*使用UICollectionViewController要註意:
1.初始化的時候設置布局參數
2.collertionView必須註冊cell
3.自己定義cell
*/

-(instancetype)init
{

    //
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];

    //設置cell的尺寸
    layout.itemSize = [UIScreen mainScreen].bounds.size;

    //清空cell間隔的行距
    layout.minimumLineSpacing = 0;

    //設置cell的滑動方向 
    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;

    return [super initWithCollectionViewLayout:layout];
}


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

#pragma mark - UICollectionView代理和數據源
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {

    return 1;
}


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 4;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    // dequeueReusableCellWithReuseIdentifier
    // 1.首先從緩存池裏取cell
    // 2.看下當前是否有註冊Cell,假設註冊了cell,就會幫你創建cell
    // 3.沒有註冊,報錯

    NYNewFeatureCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];


    // 拼接圖片名稱 3.5 320 480
    CGFloat screenH = [UIScreen mainScreen].bounds.size.height;
    NSString *imageName = [NSString stringWithFormat:@"new_feature_%ld",indexPath.row + 1];
    if (screenH > 480) { // 5 , 6 , 6 plus
        imageName = [NSString stringWithFormat:@"new_feature_%ld-568h",indexPath.row + 1];
    }

    cell.image = [UIImage imageNamed:imageName];

    [cell setIndexPath:indexPath count:4];

    return cell;
}
#pragma mark - UIScrollView代理
// 僅僅要一滾動就會調用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // 獲取當前的偏移量,計算當前第幾頁
    int page = scrollView.contentOffset.x / scrollView.bounds.size.width + 0.5;

    // 設置頁數
    _control.currentPage = page;
}


@end

自己定義的cell

NYNewFeatureCell.h

//
//  NYNewFeatureCell.h
//  貓貓微博
//
//  Created by apple on 15-8-1.
//  Copyright (c) 2015年 znycat. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface NYNewFeatureCell : UICollectionViewCell

@property (nonatomic, strong) UIImage *image;


// 推斷是否是最後一頁
- (void)setIndexPath:(NSIndexPath *)indexPath count:(int)count;

@end

NYNewFeatureCell.m

//
//  NYNewFeatureCell.m
//  貓貓微博
//
//  Created by apple on 15-8-1.
//  Copyright (c) 2015年 znycat. All rights reserved.
//

#import "NYNewFeatureCell.h"
#import "NYTabBarController.h"

@interface NYNewFeatureCell()

@property (nonatomic, weak) UIImageView *imageView;
//分享button
@property (nonatomic, weak) UIButton *shareButton;
//開始button
@property (nonatomic, weak) UIButton *startButton;
@end


@implementation NYNewFeatureCell

//分享button懶載入
- (UIButton *)shareButton
{
    if (_shareButton == nil) {

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        [btn setTitle:@"分享給大家" forState:UIControlStateNormal];
        [btn setImage:[UIImage imageNamed:@"new_feature_share_false"] forState:UIControlStateNormal];
        [btn setImage:[UIImage imageNamed:@"new_feature_share_true"] forState:UIControlStateSelected];
        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [btn sizeToFit];

        [self.contentView addSubview:btn];

        _shareButton = btn;

    }
    return _shareButton;
}

//開始button懶載入
- (UIButton *)startButton
{
    if (_startButton == nil) {
        UIButton *startBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [startBtn setTitle:@"開始微博" forState:UIControlStateNormal];
        [startBtn setBackgroundImage:[UIImage imageNamed:@"new_feature_finish_button"] forState:UIControlStateNormal];
        [startBtn setBackgroundImage:[UIImage imageNamed:@"new_feature_finish_button_highlighted"] forState:UIControlStateHighlighted];
        [startBtn sizeToFit];
        [startBtn addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:startBtn];
        _startButton = startBtn;

    }
    return _startButton;
}

-(UIImageView *)imageView
{
    if (_imageView == nil) {
        UIImageView *imageV = [[UIImageView alloc]init];

        _imageView = imageV;

        // 註意:一定要載入contentView
        [self.contentView addSubview:imageV];
    }
    return _imageView;
}

// 布局子控件的frame
-(void)layoutSubviews
{
    [super layoutSubviews];

    self.imageView.frame = self.bounds;

    // 分享button
    self.shareButton.center = CGPointMake(self.width * 0.5, self.height * 0.8);


    // 開始button
    self.startButton.center = CGPointMake(self.width * 0.5, self.height * 0.9);
}

-(void)setImage:(UIImage *)image
{
    _image = image;
    self.imageView.image = image;
}

// 推斷當前cell是否是最後一頁
-(void)setIndexPath:(NSIndexPath *)indexPath count:(int)count
{
    if (indexPath.row == count - 1) { // 最後一頁,顯示分享和開始button
        self.shareButton.hidden = NO;
        self.startButton.hidden = NO;

    }else{ // 非最後一頁,隱藏分享和開始button
        self.shareButton.hidden = YES;
        self.startButton.hidden = YES;

    }
}

// 點擊開始微博的時候調用
- (void)start
{
    // 進入tabBarVc
    NYTabBarController *tabBarVc = [[NYTabBarController alloc] init];

    // 切換根控制器:能夠直接把之前的根控制器清空
    NYKeyWindow.rootViewController = tabBarVc;

}
@end

貓貓學iOS 之微博項目實戰(7)程序啟動新特性用UICollectionViewController實現