zoukankan      html  css  js  c++  java
  • 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拿到模型数据后给内部的子控件设置对应的数据

  • 相关阅读:
    C语言-if语句
    C语言-表达式
    C语言-基础
    Java for LeetCode 187 Repeated DNA Sequences
    Java for LeetCode 179 Largest Number
    Java for LeetCode 174 Dungeon Game
    Java for LeetCode 173 Binary Search Tree Iterator
    Java for LeetCode 172 Factorial Trailing Zeroes
    Java for LeetCode 171 Excel Sheet Column Number
    Java for LeetCode 169 Majority Element
  • 原文地址:https://www.cnblogs.com/liuwj/p/6869623.html
Copyright © 2011-2022 走看看