当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS应用新特性界面

iOS应用新特性界面

2019年01月08日  | 移动技术网IT编程  | 我要评论

哈三中二模,范语希,钟无艳 夏迎春

这里写图片描述
这里写图片描述
这里写图片描述

//
//  xtxguideviewcontroller.m
//  新特性界面
//
//  copyright ? 2016年 longchuang. all rights reserved.
//

#import "xtxguideviewcontroller.h"
// 1.导入第三方框架
#import "masonry.h"
// 2.导入视图头文件
#import "xtxguideview.h"
#define xtximagecount  4
// 自定义sb视图类
@interface xtxguideviewcontroller ()

@end

@implementation xtxguideviewcontroller

- (void)viewdidload {
    [super viewdidload];
    // do any additional setup after loading the view.

    // 设置主背景图片
    [self setupui];

    [self addguideview];

}

-(void)setupui
{
    // 创建主界面图片
    uiimageview *imageview = [[uiimageview alloc]init];

    // 添加图片
    imageview.image = [uiimage imagenamed:@"cozy-control-car"];

    // 设置图片填充模式
    imageview.contentmode = uiviewcontentmodescaleaspectfit;

    // 添加到父控件
     [self.view addsubview:imageview];

    // 给imageview添加约束,添加约束前imageview一定要被添加到父控件上
    [imageview mas_makeconstraints:^(masconstraintmaker *make) {
        [make center];
        make.width.equalto(self.view.mas_width);
        make.height.equalto(self.view.mas_height);
    }];
}

-(nsarray *)loaddata
{
    // 根据图片数量开辟对应大小的空间
    nsmutablearray *arrm = [nsmutablearray arraywithcapacity:xtximagecount];
    // 读取图片名字

    for (nsinteger i = 1; i <=xtximagecount; i++) {
        nsstring *imagename = [nsstring stringwithformat:@"common_h%zd.jpg",i];
        [arrm addobject:imagename];
    }
    return arrm;
}

-(void)addguideview
{
    // 创建自定义界面,并同时创建滚动视图
    // self = guide view controller
    xtxguideview *guideview = [[xtxguideview alloc]initwithframe:self.view.bounds];
    // 此处暂未使用数据模型保存数据
    guideview.imagename = [self loaddata];

    [self.view addsubview:guideview];
}

@end
//  xtxguideview.h
//  新特性界面
//
//  copyright ? 2016年 longchuang. all rights reserved.
//
#import 
@interface xtxguideview : uiview
// 用于接收控制界面传过来的数据
@property(nonatomic,strong)nsarray *imagename;
@end
//
//  xtxguideview.m
//  新特性界面
//
//  copyright ? 2016年 longchuang. all rights reserved.
//

#import "xtxguideview.h"
#import "masonry.h"
@interface xtxguideview()

// 滚动视图
@property(nonatomic,weak)uiscrollview *scrollview;
// 翻页控制器
@property(nonatomic,weak)uipagecontrol *pagecontrol;

@end

@implementation xtxguideview

// 创建自定义view视图的时候,同时创建scrollview
-(instancetype)initwithframe:(cgrect)frame
{
    self = [super initwithframe:frame];
    if (self) {
        [self setupui];
    }
    return self;
}


-(void)setupui
{
    uiscrollview *scrollview = [[uiscrollview alloc]initwithframe:self.bounds];
    [self  addsubview:scrollview];
    self.scrollview = scrollview;
    // 隐藏两个滑动条
    scrollview.showsverticalscrollindicator = no;
    scrollview.showshorizontalscrollindicator = no;

    // 设置分页
    scrollview.pagingenabled = yes;

    // 关闭弹簧效果
    scrollview.bounces =yes;

    // 设置scrollview代理
    scrollview.delegate = self;

    // 创建分页指示器
    uipagecontrol *pagecontrol = [[uipagecontrol alloc]init];

    // 给属性赋值
    self.pagecontrol = pagecontrol;


    // 设置当前页
    pagecontrol.currentpage = 0;

    // 设置其他页的颜色
    pagecontrol.pageindicatortintcolor = [uicolor blackcolor];

    // 设置当前页的颜色
    pagecontrol.currentpageindicatortintcolor = [uicolor yellowcolor];

    // 把分页指示器添加到自定义视图上不要加在scrollview上
    [self addsubview:pagecontrol];

    // 设置分页指示器的偏移
    [pagecontrol mas_makeconstraints:^(masconstraintmaker *make) {
        // 设置x与父物体x对齐
        [make centerx];
        // 下部向上偏移20
        make.bottom.offset(-20);
    }];

    // 设置分页指示器不能点击
    pagecontrol.enabled = no;
}

// 控制器视图中通过model层的保存的数据给view层赋值的时候,调用改set方法
-(void)setimagename:(nsarray *)imagename
{
    _imagename = imagename;
    for (nsinteger i = 0 ; i < imagename.count; i++) {
        uiimageview *imageview = [[uiimageview alloc]init];
        // uiimageview的图片以及大小
        imageview.frame = cgrectoffset(self.bounds, i*self.bounds.size.width, 0);
        imageview.image = [uiimage imagenamed:imagename[i]];
        [self.scrollview addsubview:imageview];
        // 开启交互
        imageview.userinteractionenabled = yes;
        // 添加按钮
        [self makeloadmorebtn:imageview];

    }
    // 多出一页,用于显示主页面,为其增加可滑动的条件
    self.scrollview.contentsize = cgsizemake((imagename.count + 1) * self.bounds.size.width, 0);

    // 三 设置分页指示器的总个数
    self.pagecontrol.numberofpages = imagename.count;
}


// 添加按钮
- (void)makeloadmorebtn:(uiimageview *)imageview {
    // 1.创建按钮
    uibutton *loadmorebtn = [[uibutton alloc] init];
    // 2.设置图片
    [loadmorebtn setimage:[uiimage imagenamed:@"common_more_black"] forstate:uicontrolstatenormal];
    [loadmorebtn setimage:[uiimage imagenamed:@"common_more_white"] forstate:uicontrolstatehighlighted];

    // 3.添加到父控件上
    [imageview addsubview:loadmorebtn];
    // 让按钮的尺寸根据图片的大小自适应
    [loadmorebtn sizetofit];

    // 4.给加载更多按钮添加约束
    [loadmorebtn mas_makeconstraints:^(masconstraintmaker *make) {
        make.right.offset(-20);
        make.bottom.offset(-50);
    }];


    // 5.给加载更多按钮添加监听事件
    [loadmorebtn addtarget:self action:@selector(loadmorebtnclick:) forcontrolevents:uicontroleventtouchupinside];

}
#pragma mark - 加载更多按钮监听方法
- (void)loadmorebtnclick:(uibutton *)btn {
    // 1.把当前被点击的加载更多按钮隐藏
    btn.hidden = yes;
    // 2.动画的方式让imageview放大及完全透明
    [uiview animatewithduration:0.2 animations:^{
        // 让按钮的父控件,也就当前点击的按钮所在的imageview放大
        btn.superview.transform = cgaffinetransformmakescale(2, 2);
        // 让imageview透明
        btn.superview.alpha = 0;
    } completion:^(bool finished) {
        // 让新特性界面自定义视图直接从父控件上移除
        // 3.动画完成之后把自定义的新特性view直接从父控件中移除
        [self removefromsuperview];
    }];




}

#pragma mark - uiscrollviewdelegate
// 正在滚动中一直会调用此方法
- (void)scrollviewdidscroll:(uiscrollview *)scrollview {

    cgfloat page = scrollview.contentoffset.x / scrollview.bounds.size.width;
    // 当新的一页已经出来一大半就让分页指示器显示到新的一页
    nsinteger pageno = page + 0.4999;
    self.pagecontrol.currentpage = pageno;

    // 把当前的页数设置给scrollview的tag
    scrollview.tag = pageno;

    self.pagecontrol.hidden = (pageno == _imagename.count);
}

#pragma mark - 手动拖拽并且有降速过程,降速完成之后就会来调用此方法
- (void)scrollviewdidenddecelerating:(uiscrollview *)scrollview {

    // 如果滚动到最后一页并停在了空白的这一页上时,把自定义新特性界面移除
    if (scrollview.tag == _imagename.count) {
        [self removefromsuperview];
    }
}
@end

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网