iOS基础——通过案例学知识之LaunchScreen、APPIcon、StatusBar、UIScrollView、UIPageControl


今天要实现的案例效果图

iOS开发更新tabbar控制器 ios launcher控制中心怎么用?_轮播图

一、LaunchScreen

1、设置程序的LaunchScreen

在项目配置文件里配置启动页。并且在LaunchScreen.storyboard中进行布局

iOS开发更新tabbar控制器 ios launcher控制中心怎么用?_#pragma_02

2、设置LaunchScreen时间

//单位:秒
[NSThread sleepForTimeInterval:1.5f];

二、APPIcon

1、命名规则:iOS应用图标是有命名规则的,相应不同的设备都有不同的尺寸

iOS开发更新tabbar控制器 ios launcher控制中心怎么用?_ui_03

其规则是:名字+尺寸+(@nx)。比方

  • 29x29尺寸就是29x29
  • 29x29@2x尺寸就是58x58
  • 29x29@3x尺寸就是87x87

2、设置APPCIcon:将这些图片拖住到默认Assets目录中的AppIcon中,会自己主动生成相应的图标适配版本号

iOS开发更新tabbar控制器 ios launcher控制中心怎么用?_轮播图_04

三、StatusBar

iOS开发更新tabbar控制器 ios launcher控制中心怎么用?_#pragma_05

iOS开发更新tabbar控制器 ios launcher控制中心怎么用?_#pragma_06

1、全局设置,对全部页面生效

① 配置文件里设置

iOS开发更新tabbar控制器 ios launcher控制中心怎么用?_移动开发_07

② 代码设置

//设置是否隐藏状态栏
[UIApplication sharedApplication].statusBarHidden = YES;
//设置状态栏颜色,默认是黑色,这里改动为白色
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

2、局部设置,对一个页面生效

//设置是否隐藏状态栏
- (BOOL)prefersStatusBarHidden{
    return true;
}
//设置状态栏颜色,默认是黑色。这里改动为白色
- (UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleLightContent;
}

四、userInteraction(额外内容)

UserInteraction指的是用户交互,即是否同意用户对View进行不论什么操作,每一个View都有这个属性,默觉得YES

① 配置文件里设置

iOS开发更新tabbar控制器 ios launcher控制中心怎么用?_iOS开发更新tabbar控制器_08

② 代码中设置

[view setUserInteractionEnable:NO];

五、subviews(额外内容)

subviews指的是某个View中的全部子View

1、移除全部subviews

[_fatherView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

2、遍历全部subviews

//遍历全部subviews
[_fatherView.subviews enumerateObjectsUsingBlock:^(__kindof UIView
* _Nonnull obj,NSUInteger idx,BOOL * _Nonnull stop{
    //obj 表示数组中的对象
    //idx 表示下标
    //*stop YES 表示跳出遍历
}];

六、UIScrollView与UIPageControl

1、构建UIScrollView界面

iOS开发更新tabbar控制器 ios launcher控制中心怎么用?_iOS开发更新tabbar控制器_09

能够看见UIScrollView嵌套1个轮播图和几个UIImageView,轮播图是包括UIScrollView和UIPageControl(指示器),这里须要注意的是头部View和底部的View必须和UIScrollView同级,并且在UIScrollView加入之后,这样才干覆盖在UIScrollView上

2、属性声明

//UIScrollViewDelegate声明托付
@interface ViewController ()<UIScrollViewDelegate>
//轮播图
@property (weak, nonatomic) IBOutlet UIScrollView *bannerView;
//主界面
@property (weak, nonatomic) IBOutlet UIScrollView *mainScrollView;
//最后一张图片,用于设置UIScrollView的y值
@property (weak, nonatomic) IBOutlet UIImageView *lastImageView;
//指示器
@property (weak, nonatomic) IBOutlet UIPageControl *bannerIndication;
//计时器
@property (nonatomic,strong) NSTimer *timer;
@end

3、主界面代码结构

iOS中的托付相似于Android中的监听事件,其步骤也是相似Android的实现

#pragma main方法
- (void)viewDidLoad {
    [super viewDidLoad];
    //设置启动界面时间
    [NSThread sleepForTimeInterval:1.5f];
    //设置主页面UI
    [self setUpUI];
}

#pragma 自己定义方法
#pragma 设置UI
- (void)setUpUI{
    //设置滚动托付
    _bannerView.delegate = self;

    [self setUpMainScrollView];
    [self setUpBannerView];
    [self setUpBannerIndication];
    [self initTimer];
    //设置Timer的优先级
    [self setUpPriority];
}

4、实现代码

#pragma 自己定义方法
#pragma 设置主界面
-(void)setUpMainScrollerView{
    //设置ScollerView滑动x和y的范围。參数1:表示在x轴不能滑动 參数2:表示在y轴滑动到最后一个View的y坐标
    _mainScrollerView.contentSize = CGSizeMake(0, CGRectGetMaxY(_lastImageView.frame));
    //隐藏滚动栏
    _mainScrollerView.showsVerticalScrollIndicator = NO;
    _mainScrollerView.showsHorizontalScrollIndicator = NO;
    //设置内边距
    _mainScrollerView.contentInset = UIEdgeInsetsMake(0, 0, 20, 0);
    //设置偏移量,即一開始滑动到坐标(x,y)
    _mainScrollerView.contentOffset = CGPointMake(0, 0);
    //设置弹簧效果
    _mainScrollerView.bounces = YES;
    //设置弹簧效果,在竖直方向和横向方向,前提bounces属性必须为YES
    _mainScrollerView.alwaysBounceVertical = YES;
    _mainScrollerView.alwaysBounceHorizontal = YES;
    //不同意滚动的两种方法
    //_mainScrollerView.userInteractionEnabled = NO;
    //_mainScrollerView.scrollEnabled = NO;
}

#pragma 自己定义方法
#pragma 设置轮播图
-(void)setUpBannerView{
    //获取BannerView的size
    CGSize bannerSize = _bannerView.frame.size;
    for (int i=0; i<5; i++) {
        //计算x值
        CGFloat imageX = i * bannerSize.width;
        //初始化轮播图
        UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(imageX, 0, bannerSize.width, bannerSize.height)];
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"img_%02d",i+1]];
        imageView.image = image;
        //加入到BannerView中
        [_bannerView addSubview:imageView];
    }
    //设置ScollerView滑动x和y的范围
    _bannerView.contentSize = CGSizeMake(5 * bannerSize.width, 0);
    //隐藏滚动栏
    _bannerView.showsVerticalScrollIndicator = NO;
    _bannerView.showsHorizontalScrollIndicator = NO;
    //设置ScollerView分页效果,默认是以每一个View为分页标准
    _bannerView.pagingEnabled = YES;
}

#pragma 自己定义方法
#pragma 设置轮播图指示器
-(void)setUpBannerIndication{
    //指示器总数
    _bannerIndication.numberOfPages = 5;
    //当前页指示器颜色
    _bannerIndication.currentPageIndicatorTintColor = [UIColor orangeColor];
    //非当前页指示器颜色
    _bannerIndication.pageIndicatorTintColor = [UIColor whiteColor];
}

#pragma 自己定义方法
#pragma 创建计时器
-(void)initTimer{
    _timer = [NSTimer scheduledTimerWithTimeInterval:3
                                              target:self
                                            selector:@selector(startScroll)
                                            userInfo:nil
                                             repeats:YES];
}

#pragma 自己定义方法
#pragma 提升Timer的优先级,防止出现Timer不运行
-(void)setUpPriority{
    NSRunLoop *mainRunLoop = [NSRunLoop mainRunLoop];
    [mainRunLoop addTimer:_timer forMode:NSRunLoopCommonModes];
}

#pragma 滚动托付
#pragma 表示当ScrollerView减速时调用,即是松开手的时候调用
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    //输出当前滚动坐标
    NSLog(@"当前坐标为:%@",NSStringFromCGPoint(_bannerView.contentOffset));
    //依据输出当前坐标计算当前指示器的position
    int position = _bannerView.contentOffset.x / _bannerView.frame.size.width;
    //设置当前指示器position
    _bannerIndication.currentPage = position;
}

#pragma 滚动托付
#pragma 当ScrollerView開始拖动时调用
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    //停止轮播
    [_timer invalidate];
}

#pragma 滚动托付
#pragma 当ScrollerView停止拖动时调用
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    //開始轮播
    [self initTimer];
}

#pragma 自己定义方法
#pragma 开启轮播,是一个改动值的问题
-(void)startScroll{
    //获取contentOffset
    CGPoint offset = _bannerView.contentOffset;
    //获取当前position
    NSInteger position = _bannerIndication.currentPage;
    //最后一张
    if(position == 4){
        position = 0;
        offset = CGPointZero;
    }else{
        //改动contentOffset
        offset.x += _bannerView.frame.size.width;
        //改动position
        position ++;
    }
    //设置值
    _bannerIndication.currentPage = position;
    [_bannerView setContentOffset:offset animated:YES];
}

实现思路:

  • 主界面
  • 设置ScrollView滚动区域
  • 设置ScrollView其它属性
  • 轮播图
  • 依据图片的个数进行横向平铺
  • 设置ScrollView滚动区域
  • 指示器设置颜色和总数
  • 监听事件
  • 当轮播图被人为手指開始拖拽时,不应该播放轮播图
  • 当轮播图被人为手指结束拖拽时。继续播放轮播图
  • 当轮播图被人为手指放开时。计算轮播图位置进行属性值改动
  • 计时器
  • 每隔段时间运行@selector方法。用于播放轮播图
  • 提升计时器优先级,让其不被其它控件影响运行