您的位置:首页 > 运维架构 > 网站架构

MVC架构模式与xib

2016-08-21 19:53 141 查看
MVC架构模式
M:Model,模型,保存数据
V:View,视图,显示控件及数据
C:Controller,控制器,传递数据,管理视图



Xib
1).xib文件是一种自定义视图。
2)创建方法:File—New—File,选择iOS—User Interface—View/Empty。
3)好处:可以先设计好自定的视图,然后调用
4)编译运行后,在应用程序包中是以.nib文件存在
5)读取并使用nib文件的两种方法:
//第一种方法
/// 加载nib文件的方法:特别注意!!! -- 不要写扩展名
UIView *bgView = [[[NSBundle mainBundle] loadNibNamed:@"HMColorView" owner:nil options:nil] firstObject];
[self.view addSubview:bgView];

//第二种方法
// 这里注意:bundle = nil 是默认去‘包’的根目录去找
UINib *nib = [UINib nibWithNibName:@"HMColorView" bundle:[NSBundle mainBundle]];

UIView *bgView = [[nib instantiateWithOwner:nil options:nil] lastObject];

知识点:
1、帧动画

创建帧动画有两种方式

第一种是将图片数组组装成动画图片
// 将图片数组 ,组装成一个动画图片
UIImage *image = [UIImage animatedImageWithImages:imagesM.copy duration:0.1 * imagesM.count];

// 把动画图片设置给UIIMageView
self.imageView.image = image;

// [self.imageView setAnimationRepeatCount:1]; 设置动画播放次数不起作用


第二种方法是:

// 创建存放图片的可变数组
NSMutableArray *imagesM = [NSMutableArray array];

for (int i = 1; i <= 25; i++) {
// 拼接图片名称
NSString *imageName = [NSString stringWithFormat:@"father%03d",i];
// 创建图片对象
UIImage *image = [UIImage imageNamed:imageName];
// 添加到数组里面
[imagesM addObject:image];

}

// 设置动画图片数组
self.imageView.animationImages = imagesM.copy;

// 设置动画时间
[self.imageView setAnimationDuration:0.1 * imagesM.count];

// 设置动画播放次数
[self.imageView setAnimationRepeatCount:1];

//  注意!!!!不要忘了开启动画
[self.imageView startAnimating];

2、plist文件的两种读取方式

/*
plist文件的作用:存储数据
plist文件的本质:是xml文件,什么是xml文件?Extensible Markup Language - xml:可扩展标记语言,详细关于xml语言我们放在网络多线程讲解。简单说xml语言就是一个节点有开始<node> 同时也有结束</node>

例如:

<key>icon</key>
<string>greenMan</string>

plist 文件存放到哪里了?
我们的应用程序在安装到手机上的时候回被‘打包’,
通过 [NSBundle mainBundle] 查找到‘包’的路径;(每一次运行‘包’路径都不相同,每一次都会生成新的‘包’)
plist文件就被放在包的根目录下

通过 [[NSBundle mainBundle] pathForResource:ofType:] 方法在‘包’的根目录下查找文件,返回文件的路径

*/


plist文件存在应用程序包中,首先要找到包路径,然后才能读取文件。

获取包路径的方法:

[[NSBundle mainBundle] bundlePath];//应用程序的包路径


1)URL读取

//获取URL地址
NSURL *url = [[NSBundle mainBundle] URLForResource:@"demo" withExtension:@"plist"];
//plist文件内容要么是NSArry,要么是NSDictionary
//加入我们知道plist文件里存放的是 字典,我们还可以通过 NSDictionary 的 dictionaryWithContentsOfFile:方法加载
NSArray *arrDict = [NSArray arrayWithContentsOfURL:url];

for (NSDictionary *dict in arrDict) {
NSLog(@"%@",dict);
}


2)文件路径

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"plist"];

// 加载数据
NSArray *arrDict = [NSArray arrayWithContentsOfFile:filePath];

for (NSDictionary *dict in arrDict) {
NSLog(@"%@",dict);
}

3、使用UIImage时会导致内存大量增加

如果图片资源较大,或者在for循环中使用UIImage:

UIImage *image = [UIImage imageNamed:imageName];


UIImage使用imageNamed:方法加载图片,系统会自动帮助缓存,所以内存大量增加,解决办法是从文件读取,代替上述方法:

// 获取文件路径
NSString *filePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];

// 创建图片对象
UIImage *image = [UIImage imageWithContentsOfFile:filePath];


使用imageWithContentsOfFile: 使用完后会自动释放,不会缓存图片。
此时注意:图片资源不能放在Assets.xcassets文件夹下面。因为上述找文件路径的方法只能在包的根目录下查找。放在Assets.xcassets文件夹下,程序在编译运行后,会将所有图片压缩到根目录下一个文件中,无法找到这些图片资源。

因此要放置到Supporting Files,并复制、创建分组。

4、控制器到控件的引用链条

View Controller→(强引用)View→(强引用)subViews→(强引用)控件(子视图)。

View Controller对控件(子视图)是弱引用关系。

若视图控制器对控件是强引用,也不会造成内存泄漏,因为没有构成循环引用,但是会造成空间的延迟释放。

5、动画嵌套使用

// 以动画的形式让Label显示出来
// 延迟1秒钟,开始‘消失’动画
// 消失动画结束后,移除label,并且禁用按钮
[UIView animateWithDuration:1 animations:^{
// 让Label以1秒动画的速度,透明度从0 到 0.7
label.alpha = 0.7;

} completion:^(BOOL finished) {

// 延迟1秒后,让透明度从 0.7 到 0
[UIView animateWithDuration:1 delay:1 options:UIViewAnimationOptionCurveLinear animations:^{
label.alpha = 0;
} completion:^(BOOL finished) {
// 禁用按钮
sender.enabled = NO;

// 最后移除掉Label
[label removeFromSuperview];
}];

}];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xib mvc