初识xib,mvc-案例九宫格

这是小叶子学习IOS的第三天,老刘讲了代码的优化,什么xib啊,什么mvc啊,头都晕喽!今天把九宫格的代码敲了3遍,终于有点思路了,优化的还不错,我就把今天的知识点,注意点记录一下把。

我们先看一下,设计九宫格的思路吧。

思想为帅,代码为兵!

1> 从mainBundle中加载Plist

2> 按照plist中的数据数量先确定各个appView的大小和位置

3> 使用代码创建appView中的子控件,并显示内容

在此,小叶子分享一下计算九宫格的技巧

关于如何计算界面的九宫格布局,其实可以有若干种方法,不必死记课堂的代码,

要能够顺利计算出每一个小格子准确的坐标,建议:

1>  先创建若干小的视图

2>  找到自己理解比较容易的计算方法

3>  编写循环创建九宫格布局

要求:能够公用的常量尽量给抽取出来,以便增加九宫格布局的灵活性,尽量保证做到:

1> 根据要显示的数据自动调整小格子的位置和数量

2> 一旦调整了要显示的列数,仅需要修改少量的数值即可做到

 // app的长宽

    CGFloat appW = 80.00;

    CGFloat appH = 90.00;

    // 设置列数

    int totleCol = 3;

    // view中的控件数

    int viewNums = self.view.subviews.count;

    // 计算行距

    CGFloat marginX = (self.view.frame.size.width - totleCol * appW)/(totleCol + 1);

    // 列距

    CGFloat marginY = 10.0;

    // 控件的x,y

    CGFloat x = ((viewNums - 3)%totleCol) * (marginX + appW) + marginX;

    CGFloat y = ((viewNums -3)/totleCol) * (marginY +appH) + 64 + marginY;

嘿嘿,很有感觉的。

下面分享一下,学习中的注意点

1. 关于UIButton的一些补充

========================================

1.1按钮的类型

在iOS的控件中,只有UIButton提供了类方法,可以在实例化按钮时指定按钮的不同类型。

 

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

 

1.2修改按钮字体

 

在UIButton中定义有两个readonly的属性:

1> titleLabel

2> imageView

@property中readonly表示不允许修改这两个属性的指针地址,但是可以修改其属性

 

注意:由于按钮的字体大小是所有状态共用的,因此可以通过

button.titleLabel.font= [UIFont systemFontOfSize:14.0];

修改按钮标签文本的字体大小

 

但是不能使用以下代码设置按钮标签的文本内容

button.titleLabel.text = @"下载";

 

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

 

2.块动画

========================================

2.1首尾式动画

 

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

 

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:1.0];

// 修改属性的动画代码

// ......

[UIView commitAnimations];

 

2.2 块动画

 

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

 

[UIView animateWithDuration:2.0 animations:^{

    // 修改控件属性动画

    label.alpha = 0.0;

} completion:^(BOOL finished) {

    // 删除控件

    [label removeFromSuperview];

}];

 

3.字典转模型

========================================

3.1字典转模型的好处:

1> 降低代码的耦合度

2> 所有字典转模型部分的代码统一集中在一处处理,降低代码出错的几率

3> 在程序中直接使用模型的属性操作,提高编码效率

 

模型应该提供一个可以传入字典参数的构造方法

- (instancetype)initWithDict:(NSDictionary *)dict;

+ (instancetype)xxxWithDict:(NSDictionary *)dict;

 

3.2instancetype & id

1> instancetype在类型表示上,跟id一样,可以表示任何对象类型

2> instancetype只能用在返回值类型上,不能像id一样用在参数类型上

3> instancetype比id多一个好处:编译器会检测instancetype的真实类型

 

3.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;

}

在模型中合理地使用只读属性,可以进一步降低代码的耦合度。

 

3.4使用数据模型的好处:

调用方不用关心模型内部的任何处理细节!

 

应定要谨慎,要沉稳!!

转载于:https://www.cnblogs.com/daliye-blog/p/3749124.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值