MVC架构模式与xib

MVC架构模式

MModel,模型,保存数据

VView,视图,显示控件及数据

CController,控制器,传递数据,管理视图




Xib

1.xib文件是一种自定义视图。

2)创建方法:File—New—File,选择iOS—User InterfaceView/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];
        }];
        
        
    }];







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值