0814-应用程序管理 (代码创建九宫格)(九宫格详细设计)
0814-应用程序管理
-------------
代码创建九宫格
1、UIView CGRectMack(x,y,宽,高)
2、宽度 高度宏定义一下
3、x,y根据for循环中的i来确定是第几行第几列
4、计算x,y值
5、数值填入CGRect()中
--------------
九宫格详细设计
1、代码创建UIImageView(设置填充模式) UILabel UIButton
2、label (titleLabel.font 按钮不能直接设置字体 通过titleLabel属性来设置字体)
3、字典转模型 (数组包字典变成 数组包对象 对象initWithDict方法和类方法 appInfoWithDict HMAppInfo类名 alloc实例化对象 init initWithDict都属于成员方法 ,
返回值类型改成instanceType 可以避免接收该对象指针类型不匹配 主动推断接收对象是否是匹配类型 如:NSString *str = [HMAppInfo appInfoWithDict:dict];这样会编译提示错误
KVC self.name = dict[@"name"];等同于 [self setValue:dict[@"name"] forKeyPath:@"name"]; 大招 [self setValuesForKeysWithDictionary:dict];
readonly 不会生成带下划线成员变量 需要手动加入@synthesize image = _image;
)
4、数据都放到对象模型HMAppInfo类中
5、按钮监听方法 弹出Label提示文字 (label颜色用 [UILabel colorWithWhite:0.0 alpha:0.2] label的alpha值从0 变成1动画效果 收尾式动画不采用 用animationDuration方法)
6、empty模板创建xib界面 减轻代码创建控件设置多个属性的麻烦,xib界面中都将这些设置好了 (view模板也可以 代码创建循环view 不能使用懒加载控件了 否则都是同一个控件)
7、为了防止出现appView.subviews[0]这种情况出现 解决方法(xib变类):新建HMAppView类文件, xib/view控件连线变成HMAppView实例 view控件中的子控件连线 变成HMAppView的属性
(
新建HMAppView类继承UIView xib中中的view控件指定类HMAppView类,然后拖view控件中的属性控件来连线
指定HMAppView后 可以看到 UIView appView =[[[NSBundle mainBundle] loadNibNamed:"HMAppView" owner:nil options:nil] lastObject];中的appView在程序执行完后 appView实际上是 HMAppView对象了 这时候UIView改成HMAppView appView
(appView.subviews[0] 可以写成appview.iconView方式了)
)
8、xib类数据设置:
子控件属性 数据变化-》 接收模型数据类-》设置数据方法
9、xib连线按钮监听方法
代码创建按钮监听方法 需要加入button.tag 根据不同的tag值来获取对应这个按钮的数据
而xib类连线后不需要了 都自动传递自身点击button对象
删除viewController中的button属性 并取消其连线
10、xib类HMAppView自定义类方法appView 实例化对象
xib类 HMAppView对象接收HMAppInfo数据模型对象 对xib类子控件属性设置相应数据
11、xib类实例化对象,并初始化 [HMAppView appViewWithAppInfo]
// // HMViewController.m // 01-应用程序管理 // // Created by apple on 14-8-14. // Copyright (c) 2014年 itcast. All rights reserved. // #import "HMViewController.h" #import "HMAppInfo.h" #import "HMAppView.h" #define kAppViewW 80 #define kAppViewH 90 #define kColCount 3 #define kStartY 20 @interface HMViewController () /** 应用程序列表 */ @property (nonatomic, strong) NSArray *appList; @end @implementation HMViewController - (NSArray *)appList { if (_appList == nil) { _appList = [HMAppInfo appList]; } return _appList; } - (void)viewDidLoad { [super viewDidLoad]; // 搭建界面,九宫格 // 320 - 3 * 80 = 80 / 4 = 20 CGFloat marginX = (self.view.bounds.size.width - kColCount * kAppViewW) / (kColCount + 1); CGFloat marginY = 10; for (int i = 0; i < self.appList.count; i++) { // 行 // 0, 1, 2 => 0 // 3, 4, 5 => 1 int row = i / kColCount; // 列 // 0, 3, 6 => 0 // 1, 4, 7 => 1 // 2, 5, 8 => 2 int col = i % kColCount; CGFloat x = marginX + col * (marginX + kAppViewW); CGFloat y = kStartY + marginY + row * (marginY + kAppViewH); // // 从XIB来加载自定义视图 // HMAppView *appView = [[[NSBundle mainBundle] loadNibNamed:@"HMAppView" owner:nil options:nil] lastObject]; // HMAppView *appView = [HMAppView appView]; HMAppView *appView = [HMAppView appViewWithAppInfo:self.appList[i]]; // 设置视图位置 appView.frame = CGRectMake(x, y, kAppViewW, kAppViewH); [self.view addSubview:appView]; // // 实现视图内部细节 // appView.appInfo = self.appList[i]; } } @end
--------------
有智能提示的注释写法
/**
*/
---------------
MVC
控制器负责界面搭建和主流程
模型类存放数据
视图类负责显示
// MVC流程: 控制器-》获取模型数据-》传递给视图 最后显示
HMAppView *appView = [HMAppView appViewWithAppInfo:self.appList[i]]; // 设置视图位置 appView.frame = CGRectMake(x, y, kAppViewW, kAppViewH); [self.view addSubview:appView];
----------------
reveal使用和破解(文章中xcode插件使用有介绍)
与reveal功能类似的xcode自带的方法 Debug -> View Debugging -> Capture View Hierachy
--------------------
其他不重要的:
Xcode显示行号:xcode->preferences->textEditing->line numbers
能不暴露的属性都放到私有扩展里
git的使用方法:
source control-> app程序-》switch to branches
KVC 初始化模型对象 所以有 init方法初始化
视图对象用不到KVC的就只需要类方法初始化 创建视图对象