• IOS 应用管理(九宫格) 总结笔记


    1. 开发前的思路

    ========================================
    1> 从mainBundle中加载Plist
    2> 按照plist中的数据数量先确定各个appView的大小和位置
    3> 使用代码创建appView中的子控件,并显示内容


    2. 关于九宫格布局的计算方法

    ========================================
    关于如何计算界面的九宫格布局,其实可以有若干种方法,不必死记课堂的代码,
    要能够顺利计算出每一个小格子准确的坐标,建议:
    1>  先创建若干小的视图
    2>  找到自己理解比较容易的计算方法
    3>  编写循环创建九宫格布局

    要求:能够公用的常量尽量给抽取出来,以便增加九宫格布局的灵活性,尽量保证做到:
    1> 根据要显示的数据自动调整小格子的位置和数量
    2> 一旦调整了要显示的列数,仅需要修改少量的数值即可做到

    3. 关于UIButton的一些补充
    ========================================
    3.1 按钮的类型
    在iOS的控件中,只有UIButton提供了类方法,可以在实例化按钮时指定按钮的不同类型。

    UIButtonTypeCustom和[[UIButton alloc] init]是等价的

    3.2 修改按钮字体

    UIButton中定义有两个readonly的属性:
    1> titleLabel
    2> imageView
    @propertyreadonly表示不允许修改这两个属性的指针地址,但是可以修改其属性

    注意:由于按钮的字体大小是所有状态共用的,因此可以通过
    button.titleLabel.font= [UIFont systemFontOfSize:14.0];
    修改按钮标签文本的字体大小

    但是不能使用以下代码设置按钮标签的文本内容
    button.titleLabel.text = @"下载";

    因为按钮标签的文本内容是跟按钮的状态向关的

    4. 块动画
    ========================================
    4.1 首尾式动画

    如果只是修改控件的属性,使用首尾式动画还是比较方便的,但是如果需要在动画完成后做后续处理,就不是那么方便了

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    // 修改属性的动画代码
    // ......
    [UIView commitAnimations];

    4.2 块动画

    块动画相对来说比较灵活,尤为重要的是能够将动画相关的代码编写在一起,便于代码的阅读和理解

    [UIView animateWithDuration:2.0 animations:^{
        // 修改控件属性动画
        label.alpha = 0.0;
    } completion:^(BOOL finished) {
        // 删除控件
        [label removeFromSuperview];
    }];

    5. 字典转模型
    ========================================
    5.1 字典转模型的好处:
    1> 降低代码的耦合度
    2> 所有字典转模型部分的代码统一集中在一处处理,降低代码出错的几率
    3> 在程序中直接使用模型的属性操作,提高编码效率

    模型应该提供一个可以传入字典参数的构造方法
    - (instancetype)initWithDict:(NSDictionary *)dict;
    + (instancetype)xxxWithDict:(NSDictionary *)dict;

    5.2 instancetype & id
    1> instancetype在类型表示上,跟id一样,可以表示任何对象类型
    2> instancetype只能用在返回值类型上,不能像id一样用在参数类型上
    3> instancetype比id多一个好处:编译器会检测instancetype的真实类型

    5.3 在模型中添加readonly属性
    // 定义属性时,会生成getter&setter方法,还会生成一个带下划线的成员变量
    // 而如果是readonly属性,则只会生成getter方法,同时没有成员变量
    @property (nonatomic, strong, readonly) UIImage *image;

    @interface LFAppInfo()
    {
        UIImage *_imageABC;
    }
    - (UIImage *)image
    {
        if (!_imageABC) {
            _imageABC = [UIImage imageNamed:self.icon];
        }
        return _imageABC;
    }
    在模型中合理地使用只读属性,可以进一步降低代码的耦合度。

    5.4 使用数据模型的好处:
    *** 调用方不用关心模型内部的任何处理细节!

    6. XIB
    ========================================
    Xib文件可以用来描述某一块局部的UI界面

    XIB & Storyboard
    相同点:
    1>  都用来描述软件界面
    2>  都用Interface Builder工具来编辑
    不同点
    1>  Xib是轻量级的,用来描述局部的UI界面
    2>  Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系

    7. View的封装思路
    ========================================
    1>  如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心
    2>  外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据

  • 相关阅读:
    js根据年份获取某月份有几天
    java 时间转换去杠
    简单Maven Dos命令语句
    Maven命令参数
    Redis学习推荐
    Java中Redis缓存
    oracle新建登录用户sql语句
    ORacle修改表列长度
    jsp利用application统计在线人数的方法
    Oracle之分页查询
  • 原文地址:https://www.cnblogs.com/liuwj/p/6869623.html
Copyright © 2020-2023  润新知