手机
当前位置:查字典教程网 >编程开发 >IOS开发 >解析iOS应用的UI开发中懒加载和xib的简单使用方法
解析iOS应用的UI开发中懒加载和xib的简单使用方法
摘要:懒加载1.懒加载基本懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其get方法.注意:如果是懒加载...

懒加载

1.懒加载基本

懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其get方法.

注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化

2.使用懒加载的好处:

(1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强

(2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合

3.代码示例

复制代码 代码如下:

//

// YYViewController.m

// 03-图片浏览器初步

//

// Created by apple on 14-5-21.

// Copyright (c) 2014年 itcase. All rights reserved.

//

#import "YYViewController.h"

#define POTOIMGW 200

#define POTOIMGH 300

#define POTOIMGX 60

#define POTOIMGY 50

@interface YYViewController ()

@property(nonatomic,strong)UILabel *firstlab;

@property(nonatomic,strong)UILabel *lastlab;

@property(nonatomic,strong)UIImageView *icon;

@property(nonatomic,strong)UIButton *leftbtn;

@property(nonatomic,strong)UIButton *rightbtn;

@property(nonatomic,strong)NSArray *array;

@property(nonatomic ,assign)int i;

-(void)change;

@end

复制代码 代码如下:

@implementation YYViewController

- (void)viewDidLoad

{

[super viewDidLoad];

[self change];

}

-(void)change

{

[self.firstlab setText:[NSString stringWithFormat:@"%d/5",self.i+1]];

//先get再set

self.icon.image=[UIImage imageNamed:self.array[self.i][@"name"]];

self.lastlab.text=self.array[self.i][@"desc"];

self.leftbtn.enabled=(self.i!=0);

self.rightbtn.enabled=(self.i!=4);

}

//延迟加载

/**1.图片的序号标签*/

-(UILabel *)firstlab

{

//判断是否已经有了,若没有,则进行实例化

if (!_firstlab) {

_firstlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 10, 300, 30)];

[_firstlab setTextAlignment:NSTextAlignmentCenter];

[self.view addSubview:_firstlab];

}

return _firstlab;

}

/**2.图片控件的延迟加载*/

-(UIImageView *)icon

{

//判断是否已经有了,若没有,则进行实例化

if (!_icon) {

_icon=[[UIImageView alloc]initWithFrame:CGRectMake(POTOIMGX, POTOIMGY, POTOIMGW, POTOIMGH)];

UIImage *image=[UIImage imageNamed:@"biaoqingdi"];

_icon.image=image;

[self.view addSubview:_icon];

}

return _icon;

}

/**3.描述控件的延迟加载*/

-(UILabel *)lastlab

{

//判断是否已经有了,若没有,则进行实例化

if (!_lastlab) {

_lastlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 400, 300, 30)];

[_lastlab setTextAlignment:NSTextAlignmentCenter];

[self.view addSubview:_lastlab];

}

return _lastlab;

}

/**4.左键按钮的延迟加载*/

-(UIButton *)leftbtn

{

//判断是否已经有了,若没有,则进行实例化

if (!_leftbtn) {

_leftbtn=[UIButton buttonWithType:UIButtonTypeCustom];

_leftbtn.frame=CGRectMake(0, self.view.center.y, 40, 40);

[_leftbtn setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal];

[_leftbtn setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted];

[self.view addSubview:_leftbtn];

[_leftbtn addTarget:self action:@selector(leftclick:) forControlEvents:UIControlEventTouchUpInside];

}

return _leftbtn;

}

/**5.右键按钮的延迟加载*/

-(UIButton *)rightbtn

{

if (!_rightbtn) {

_rightbtn=[UIButton buttonWithType:UIButtonTypeCustom];

_rightbtn.frame=CGRectMake(POTOIMGX+POTOIMGW+10, self.view.center.y, 40, 40);

[_rightbtn setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal];

[_rightbtn setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted];

[self.view addSubview:_rightbtn];

[_rightbtn addTarget:self action:@selector(rightclick:) forControlEvents:UIControlEventTouchUpInside];

}

return _rightbtn;

}

//array的get方法

-(NSArray *)array

{

if (_array==nil) {

NSString *path=[[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];

_array=[[NSArray alloc]initWithContentsOfFile:path];

}

return _array;

}

-(void)rightclick:(UIButton *)btn

{

self.i++;

[self change];

}

-(void)leftclick:(UIButton *)btn

{

self.i--;

[self change];

}

@end

xib的简单使用

一、简单介绍

xib和storyboard的比较,一个轻量级一个重量级。

共同点:

都用来描述软件界面

都用Interface Builder工具来编辑

不同点:

Xib是轻量级的,用来描述局部的UI界面

Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系

二、xib的简单使用

1.建立xib文件

解析iOS应用的UI开发中懒加载和xib的简单使用方法1

建立的xib文件命名为appxib.xib

解析iOS应用的UI开发中懒加载和xib的简单使用方法2

2.对xib进行设置

根据程序的需要,这里把view调整为自由布局

解析iOS应用的UI开发中懒加载和xib的简单使用方法3

建立view模型(设置长宽等参数)

解析iOS应用的UI开发中懒加载和xib的简单使用方法4

调整布局和内部的控件

解析iOS应用的UI开发中懒加载和xib的简单使用方法5

完成后的单个view

解析iOS应用的UI开发中懒加载和xib的简单使用方法6

3.使用xib文件的代码示例

YYViewController.m文件代码如下:

复制代码 代码如下:

//

// YYViewController.m

// 10-xib文件的使用

//

// Created by apple on 14-5-24.

// Copyright (c) 2014年 itcase. All rights reserved.

//

#import "YYViewController.h"

#import "YYapp.h"

@interface YYViewController ()

@property(nonatomic,strong)NSArray *app;

@end

复制代码 代码如下:

@implementation YYViewController

//1.加载数据信息

-(NSArray *)app

{

if (!_app) {

NSString *path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];

NSArray *temparray=[NSArray arrayWithContentsOfFile:path];

//字典转模型

NSMutableArray *arrayM=[NSMutableArray array ];

for (NSDictionary *dict in temparray) {

[arrayM addObject:[YYapp appWithDict:dict]];

}

_app=arrayM;

}

return _app;

}

//创建界面原型

- (void)viewDidLoad

{

[super viewDidLoad];

NSLog(@"%d",self.app.count);

//九宫格布局

int totalloc=3;

CGFloat appviewW=80;

CGFloat appviewH=90;

CGFloat margin=(self.view.frame.size.width-totalloc*appviewW)/(totalloc+1);

int count=self.app.count;

for (int i=0; i<count; i++) {

int row=i/totalloc;

int loc=i%totalloc;

CGFloat appviewX=margin + (margin +appviewW)*loc;

CGFloat appviewY=margin + (margin +appviewH)*row;

YYapp *app=self.app[i];

//拿出xib视图

NSArray *apparray= [[NSBundle mainBundle]loadNibNamed:@"appxib" owner:nil options:nil];

UIView *appview=[apparray firstObject];

//加载视图

appview.frame=CGRectMake(appviewX, appviewY, appviewW, appviewH);

UIImageView *appviewImg=(UIImageView *)[appview viewWithTag:1];

appviewImg.image=app.image;

UILabel *appviewlab=(UILabel *)[appview viewWithTag:2];

appviewlab.text=app.name;

UIButton *appviewbtn=(UIButton *)[appview viewWithTag:3];

[appviewbtn addTarget:self action:@selector(appviewbtnClick:) forControlEvents:UIControlEventTouchUpInside];

appviewbtn.tag=i;

[self.view addSubview:appview];

}

}

/**按钮的点击事件*/

-(void)appviewbtnClick:(UIButton *)btn

{

YYapp *apps=self.app[btn.tag];

UILabel *showlab=[[UILabel alloc]initWithFrame:CGRectMake(60, 450, 200, 20)];

[showlab setText:[NSString stringWithFormat: @"%@下载成功",apps.name]];

[showlab setBackgroundColor:[UIColor lightGrayColor]];

[self.view addSubview:showlab];

showlab.alpha=1.0;

//简单的动画效果

[UIView animateWithDuration:2.0 animations:^{

showlab.alpha=0;

} completion:^(BOOL finished) {

[showlab removeFromSuperview];

}];

}

@end

运行效果:

解析iOS应用的UI开发中懒加载和xib的简单使用方法7

三、对xib进行连线示例

1.连线示例

新建一个xib对应的视图类,继承自Uiview

解析iOS应用的UI开发中懒加载和xib的简单使用方法8

在xib界面右上角与新建的视图类进行关联

解析iOS应用的UI开发中懒加载和xib的简单使用方法9

把xib和视图类进行连线

解析iOS应用的UI开发中懒加载和xib的简单使用方法10

注意:在使用中把weak改成为强引用。否则...

2.连线后的代码示例

YYViewController.m文件代码如下:

复制代码 代码如下:

//

// YYViewController.m

// 10-xib文件的使用

//

// Created by apple on 14-5-24.

// Copyright (c) 2014年 itcase. All rights reserved.

//

#import "YYViewController.h"

#import "YYapp.h"

#import "YYappview.h"

@interface YYViewController ()

@property(nonatomic,strong)NSArray *app;

@end

复制代码 代码如下:

@implementation YYViewController

//1.加载数据信息

-(NSArray *)app

{

if (!_app) {

NSString *path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];

NSArray *temparray=[NSArray arrayWithContentsOfFile:path];

//字典转模型

NSMutableArray *arrayM=[NSMutableArray array ];

for (NSDictionary *dict in temparray) {

[arrayM addObject:[YYapp appWithDict:dict]];

}

_app=arrayM;

}

return _app;

}

//创建界面原型

- (void)viewDidLoad

{

[super viewDidLoad];

NSLog(@"%d",self.app.count);

//九宫格布局

int totalloc=3;

CGFloat appviewW=80;

CGFloat appviewH=90;

CGFloat margin=(self.view.frame.size.width-totalloc*appviewW)/(totalloc+1);

int count=self.app.count;

for (int i=0; i<count; i++) {

int row=i/totalloc;

int loc=i%totalloc;

CGFloat appviewX=margin + (margin +appviewW)*loc;

CGFloat appviewY=margin + (margin +appviewH)*row;

YYapp *app=self.app[i];

//拿出xib视图

NSArray *apparray= [[NSBundle mainBundle]loadNibNamed:@"appxib" owner:nil options:nil];

//注意这里的类型名!

//UIView *appview=[apparray firstObject];

YYappview *appview=[apparray firstObject];

//加载视图

appview.frame=CGRectMake(appviewX, appviewY, appviewW, appviewH);

[self.view addSubview:appview];

appview.appimg.image=app.image;

appview.applab.text=app.name;

appview.appbtn.tag=i;

[ appview.appbtn addTarget:self action:@selector(appviewbtnClick:) forControlEvents:UIControlEventTouchUpInside];

}

}

/**按钮的点击事件*/

-(void)appviewbtnClick:(UIButton *)btn

{

YYapp *apps=self.app[btn.tag];

UILabel *showlab=[[UILabel alloc]initWithFrame:CGRectMake(60, 450, 200, 20)];

[showlab setText:[NSString stringWithFormat: @"%@下载成功",apps.name]];

[showlab setBackgroundColor:[UIColor lightGrayColor]];

[self.view addSubview:showlab];

showlab.alpha=1.0;

//简单的动画效果

[UIView animateWithDuration:2.0 animations:^{

showlab.alpha=0;

} completion:^(BOOL finished) {

[showlab removeFromSuperview];

}];

}

@end

YYappview.h文件代码(已经连线)

复制代码 代码如下:

#import <UIKit/UIKit.h>

@interface YYappview : UIView

@property (strong, nonatomic) IBOutlet UIImageView *appimg;

@property (strong, nonatomic) IBOutlet UILabel *applab;

@property (strong, nonatomic) IBOutlet UIButton *appbtn;

@end

【解析iOS应用的UI开发中懒加载和xib的简单使用方法】相关文章:

iOS开发中Quartz2D的基本使用方式举例

iOS开发ASIHTTPRequest数据压缩和Cookie的使用

剖析iOS开发中Cocos2d-x的内存管理相关操作

分享一个iOS下实现基本绘画板功能的简单方法

iOS开发中一些手写控件及其相关属性的使用

Unity3d发布IOS9应用时出现中文乱码的解决方法

iOS开发中实现邮件和短信发送的简单示例

举例讲解iOS开发中拖动视图的实现

iOS开发中UISwitch按钮的使用方法简介

IOS开发之CocoaPods安装和使用教程

精品推荐
分类导航