引导页背景渐变

使用:

// 左上角头像

        NSArray *coverImageNames = @[@"img_index_01txt", @"img_index_02txt", @"img_index_03txt"];

        // 背景图

        NSArray *backgroundImageNames = @[@"img_index_01bg", @"img_index_02bg", @"img_index_03bg"];

        self.introductionView = [[LOIntroductionViewController alloc]initWithCoverImageNames:coverImageNames backgroundImageNames:backgroundImageNames];

        [self.window addSubview:self.introductionView.view];

        __weak AppDelegate *weakSelf = self;

        self.introductionView.didSelectedEnter = ^() {

            [weakSelf.introductionView.view removeFromSuperview];

            weakSelf.introductionView = nil;

        };




//

//  LOIntroductionViewController.h

//  

//

//  Created by Floating_SH on 16/1/18.

//  Copyright © 2016 K_night. All rights reserved.

//


#import <UIKit/UIKit.h>


typedef void (^DidSelectedEnter)();


@interface LOIntroductionViewController : UIViewController

@property (strong,nonatomic) UIScrollView *pagingScrollView;

@property (nonatomic, strong) UIButton *enterButton;

@property (copy, nonatomic) DidSelectedEnter didSelectedEnter;

@property (strong,nonatomic) NSArray *backgroundImageNames;

@property (strong,nonatomic) NSArray *coverImageNames;


- (id)initWithCoverImageNames:(NSArray*)coverNames;


- (id)initWithCoverImageNames:(NSArray*)coverNames backgroundImageNames:(NSArray*)bgNames;


- (id)initWithCoverImageNames:(NSArray*)coverNames backgroundImageNames:(NSArray*)bgNames button:(UIButton*)button;



@end




//

//  LOIntroductionViewController.m

//  

//

//  Created by Floating_SH on 16/1/18.

//  Copyright © 2016 K_night. All rights reserved.

//


#import "LOIntroductionViewController.h"


@interface LOIntroductionViewController ()<UIScrollViewDelegate>


@property (nonatomic, strong) NSArray *backgroundViews;

@property (nonatomic, strong) NSArray *scrollViewPages;

@property (nonatomic, strong) UIPageControl *pageControl;

@property (nonatomic, assign) NSInteger centerPageIndex;


@end


@implementation LOIntroductionViewController


- (id)initWithCoverImageNames:(NSArray *)coverNames

{

    if (self = [super init]) {

        [self initSelfWithCoverNames:coverNames backgroundImageNames:nil];

    }

    return self;

}


- (id)initWithCoverImageNames:(NSArray *)coverNames backgroundImageNames:(NSArray *)bgNames

{

    if (self = [super init]) {

        [self initSelfWithCoverNames:coverNames backgroundImageNames:bgNames];

    }

    return self;

}


- (id)initWithCoverImageNames:(NSArray *)coverNames backgroundImageNames:(NSArray *)bgNames button:(UIButton *)button

{

    if (self = [super init]) {

        [self initSelfWithCoverNames:coverNames backgroundImageNames:bgNames];

        self.enterButton = button;

    }

    return self;

}


- (void)initSelfWithCoverNames:(NSArray *)coverNames backgroundImageNames:(NSArray *)bgNames

{

    self.coverImageNames = coverNames;

    self.backgroundImageNames = bgNames;

}


- (void)viewDidLoad {

    [super viewDidLoad];

    

    [self addBackgroundViews];

    self.pagingScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];

    self.pagingScrollView.delegate = self;

    self.pagingScrollView.pagingEnabled = YES;

    self.pagingScrollView.showsHorizontalScrollIndicator = NO;

    [self.view addSubview:self.pagingScrollView];

    self.pageControl = [[UIPageControl alloc] initWithFrame:[self frameOfPageControl]];

    self.pageControl.pageIndicatorTintColor = [UIColor grayColor];

    [self.view addSubview:self.pageControl];

    

    if (!self.enterButton) {

        self.enterButton = [UIButton new];

        [self.enterButton setTitle:NSLocalizedString(@"Enter", nil) forState:UIControlStateNormal];

        self.enterButton.layer.borderWidth = 0.5;

        self.enterButton.layer.borderColor = [UIColor whiteColor].CGColor;

    }

    

    [self.enterButton addTarget:self action:@selector(enter:) forControlEvents:UIControlEventTouchUpInside];

    self.enterButton.frame = [self frameOfEnterButton];

    self.enterButton.alpha = 0;

    [self.view addSubview:self.enterButton];

    

    [self reloadPages];

}


- (void)addBackgroundViews

{

    CGRect frame = self.view.bounds;

    NSMutableArray *tmpArray = [NSMutableArray new];

    [[[[self backgroundImageNames] reverseObjectEnumerator] allObjects] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:obj]];

        imageView.frame = frame;

        imageView.tag = idx + 1;

        [tmpArray addObject:imageView];

        [self.view addSubview:imageView];

    }];

    

    self.backgroundViews = [[tmpArray reverseObjectEnumerator] allObjects];

}


- (void)reloadPages

{

    self.pageControl.numberOfPages = [[self coverImageNames] count];

    self.pagingScrollView.contentSize = [self contentSizeOfScrollView];

    

    __block CGFloat x = 0;

    [[self scrollViewPages] enumerateObjectsUsingBlock:^(UIView *obj, NSUInteger idx, BOOL *stop) {

        obj.frame = CGRectOffset(obj.frame, x, 0);

        [self.pagingScrollView addSubview:obj];

        

        x += obj.frame.size.width;

    }];

    

    // fix enterButton can not presenting if ScrollView have only one page

    if (self.pageControl.numberOfPages == 1) {

        self.enterButton.alpha = 1;

        self.pageControl.alpha = 0;

    }

    

    // fix ScrollView can not scrolling if it have only one page

    if (self.pagingScrollView.contentSize.width == self.pagingScrollView.frame.size.width) {

        self.pagingScrollView.contentSize = CGSizeMake(self.pagingScrollView.contentSize.width + 1, self.pagingScrollView.contentSize.height);

    }

}


- (CGRect)frameOfPageControl

{

    return CGRectMake(0, self.view.bounds.size.height - 30, self.view.bounds.size.width, 30);

}


- (CGRect)frameOfEnterButton

{

    CGSize size = self.enterButton.bounds.size;

    if (CGSizeEqualToSize(size, CGSizeZero)) {

        size = CGSizeMake(self.view.frame.size.width * 0.6, 40);

    }

    return CGRectMake(self.view.frame.size.width / 2 - size.width / 2, self.pageControl.frame.origin.y - size.height, size.width, size.height);

}


#pragma mark - UIScrollViewDelegate


- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    NSInteger index = scrollView.contentOffset.x / self.view.frame.size.width;

    CGFloat alpha = 1 - ((scrollView.contentOffset.x - index * self.view.frame.size.width) / self.view.frame.size.width);

    

    if ([self.backgroundViews count] > index) {

        UIView *v = [self.backgroundViews objectAtIndex:index];

        if (v) {

            [v setAlpha:alpha];

        }

    }

    

    self.pageControl.currentPage = scrollView.contentOffset.x / (scrollView.contentSize.width / [self numberOfPagesInPagingScrollView]);

    

    [self pagingScrollViewDidChangePages:scrollView];

}


- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView

{

    if ([scrollView.panGestureRecognizer translationInView:scrollView.superview].x < 0) {

        if (![self hasNext:self.pageControl]) {

            [self enter:nil];

        }

    }

}


#pragma mark - UIScrollView & UIPageControl DataSource


- (BOOL)hasNext:(UIPageControl*)pageControl

{

    return pageControl.numberOfPages > pageControl.currentPage + 1;

}


- (BOOL)isLast:(UIPageControl*)pageControl

{

    return pageControl.numberOfPages == pageControl.currentPage + 1;

}


- (NSInteger)numberOfPagesInPagingScrollView

{

    return [[self coverImageNames] count];

}


- (void)pagingScrollViewDidChangePages:(UIScrollView *)pagingScrollView

{

    if ([self isLast:self.pageControl]) {

        if (self.pageControl.alpha == 1) {

            self.enterButton.alpha = 0;

            

            [UIView animateWithDuration:0.4 animations:^{

                self.enterButton.alpha = 1;

                self.pageControl.alpha = 0;

            }];

        }

    } else {

        if (self.pageControl.alpha == 0) {

            [UIView animateWithDuration:0.4 animations:^{

                self.enterButton.alpha = 0;

                self.pageControl.alpha = 1;

            }];

        }

    }

}


- (BOOL)hasEnterButtonInView:(UIView*)page

{

    __block BOOL result = NO;

    [page.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

        if (obj && obj == self.enterButton) {

            result = YES;

        }

    }];

    return result;

}


- (UIImageView*)scrollViewPage:(NSString*)imageName

{

    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];

    CGSize size = {[[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height};

    imageView.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y, size.width, size.height);

    return imageView;

}


- (NSArray*)scrollViewPages

{

    if ([self numberOfPagesInPagingScrollView] == 0) {

        return nil;

    }

    

    if (_scrollViewPages) {

        return _scrollViewPages;

    }

    

    NSMutableArray *tmpArray = [NSMutableArray new];

    [self.coverImageNames enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

        

        UIImageView *v = [self scrollViewPage:obj];

        [tmpArray addObject:v];

    }];

    _scrollViewPages = tmpArray;

    return _scrollViewPages;

}


- (CGSize)contentSizeOfScrollView

{

    UIView *view = [[self scrollViewPages] firstObject];

    return CGSizeMake(view.frame.size.width * self.scrollViewPages.count, view.frame.size.height);

}


#pragma mark - Action


- (void)enter:(id)object

{

    if (self.didSelectedEnter) {

        self.didSelectedEnter();

    }

}



- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}




@end







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值