2015年07月01日第二天笔记

时间:2021-10-09 11:47:58

昨天遗留
1.动态产生按钮赋给事先定义的属性,就可以全局使用它了
2015年07月01日08:19:12
1.整理电脑内存垃圾:cleanMyMac 软件

2.消化今天,预习 第3、4天 因为比较难

3.图片浏览器

4.汤姆猫

5.QQ登录
1)看要求,分析需要完成步骤
分析

1)控件可以全选,按方向键移动
2)Placeholder:设置默认文本
3)Keyboard style:只显示数字键盘
4)secure text entry:暗文设置

5)清空:设置文本框 是否显示清楚按钮 Clear Button
6)编辑前清空:clearButton 下的复选框

7)直接想代码文件拖控件,自动生成大致代码,可以同时设置传递的参数,一个就是当前控件

8)在代码中改已经连线的方法/属性名,会报错,这时要到UI界面,找到这个控件点击右键,删除不需要的连线方法【细节】 属性连线不明确的问题

9)连线相当于纯代码中,新建的变量赋给定义的属性值,连线就自动完成了这个事

10)readme.m文件:在项目中新建,不让它参数编译,选中项目看右边 B。。。P。。。3设置下 取消掉

11)NSLog里含有中文,可能到导致代码提示消失,可以最后写中文

12)判断文本框的值是否为空,可以用该值的长度是否等于0 来判断

13)老师增加了一个弹出框功能——跟踪看代码 两种方式

I>UIAlertView A,[A show];
II>UIAlertController B, [B ]

14)在IBAction里,择机返回:用 return;

15)用类方法创建对象的好处:同时设定一些对象参数

16)展示后作的事?

17)摧毁是红色的?

18)注意 IOS 版本特性 会影响 IPhone X 的兼容性

2015年07月01日09:20:26

transform 是button的属性

1)平移 动态修改控件基准线
2)Iphne6 屏幕 365
3)LABLE占整行
2015年07月01日11:25:15
1)用strong 可以在多个方法里使用这个属性变量

2)找放大镜替换

3)准备数据在viewdidload方法里

2015年07月01日14:36:31

1)自己创建的plist文件,放在support。。。里面,并且名字中不要带info
2)黑苹果里有个强制退出列表
3).git就是代码仓库
4)提交代码:source Controller — summit
5)文件结构后的问号?表示没有加入.git代码仓库里
6)使用字典存储数据是不专业的 因为key字符串容易写错,所以用更专业的model来存储,模型对应一个类,就是说专门创建一个类

2015年07月01日19:43:48

1.字典数据转换为模型数据分析

原因:
1)字典使用key来获取数据的,key是字符串,容易写错
2)使用key方法数据的时候,不会有代码提示

解决
1)首先创建一个模型类
2)确定属性,该属性和原字典关键字一样
3)声明和实现两个方法,用来初始化对象 1)类方法 2)对象方法

4)创建一个类方法A,用来加载数据并转化字典对象为模型对象 并存放在数组中,返回数组

ViewController应用

1)引入模型类头文件
2)定义数组属性,实现属性的getter方法
3)属性的getter方法:调用模型类的方法A获取数据 技巧:首先判断属性变量是否为空,为空再加载 (懒加载)
4)懒加载优点:1.无论在任何时候使用,都能够获得正确的数据 2.如果没有使用这个数据,那么就不会被加载内存中,从节省内存

2015年07月02日07:18:59

1.在View里看不同代码版本
2.%02d:如果整数不够2位就左位补上0
NSString *imageName = [NSString stringWIthFormat:@”drink_%02d”,i];
3.汤姆猫动画分析
事先想图片资源库导入图片资源
1)定义一个可变数组存放图片对象
2)利用图片资源的各个图片名初始化一个图片对象
3)加入数组

4)用数组设置动画图片
5)设置动画播放次数
6)设置动画播放时间:图片个数 * 单位时间
7)开始播放图片

2015年07月02日08:29:55
1.获取图片 内存优化问题
通过imageNamed:方法创建的图片,系统会默认对其进行缓存(加载内存中,不销毁它)
1)优点:访问速度快
2)缺点:占用内存一直不释放(容易导致程序闪退)
3)在images.xcassets文件夹下的图片,会压缩和加密成为一个Assets.car文件,这个文件中图片只能通过imageNamed:获得
4)如果是.jpg图片并且部署版本低于8.0那么这些图片,都不会被压缩和加密,但是.png是可以的.
UIImage *image = [UIImage imageNamed:imageFullName];

imageWithContentsOfFile:这个方法不会缓存图片,但是此时图片文件就不要放在images.xcassets文件夹下了;要放在Supporting Files下(添加选项:1;2.1;3.1)
UIImage *image = [UIImage imageWithContentsOfFile:path];

如果是.jpg的图片,且不在images.xcassets必须写后缀名称

5)*****OfFile:他需要使用绝对路径

6)取绝对路径
NSString *path = [[NSBundle mainBundle] pathForResource:文件名 ofType:文件扩展名];

具体实现代码

-(void) playAnimationWithImageName:(NSString *) imageName andImageCount:(int) count
{
if(self.imageView.isAnimating)//判断动画是否还在继续
{
return;
}
NSMutableArray *images = [NSMutableArray array];
for (int i=0; i<count; ++i) {
NSString *imageFullName = [NSString stringWithFormat:@"%@_%02d",imageName,i];
// UIImage *image = [UIImage imageNamed:imageFullName];//会缓存数据,浪费内存
NSString *path = [[NSBundle mainBundle] pathForResource:imageFullName ofType:@"jpg"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
[images addObject:image];
}
self.imageView.animationImages = images;
self.imageView.animationRepeatCount = 1;
self.imageView.animationDuration = count * 0.05;
[self.imageView startAnimating];
//等动画播放完毕再清空图片
[self.imageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.imageView.animationDuration];
}

2015年07月02日09:04:32
1.播放音频
1) 引入处理音频文件的头文件 #import

@property (nonatomic,assign) int index;
2)next 方法实现
-(IBAction)next{
self.index ++;
self.indexLabel.text = [NSString stringWithFormat:@“%d/%d”,self.index,5];
switch(self.index){
case 1:
self.imageView.iamge = [UIImage imageNamed:@“biaoqingdi”];
self.descLabel.text = @“在他面前,其他神马表情都弱爆了!”;
break;
case 2:
self.imageView.image = [UIImage imageNamed:”wangba”];
self.descLabel.text = @“哥们为什么选8号呢”;
break;
}
//控

制最后一张不可点击
if(self.index != 1) self.previousBtn.enabled = YES;
if(self.index == 5) self.nextBtn.enabled = NO;
}
3)Label控件 显示不全的问题
首先设置 参数面板的Lines为0,然后调整Label 大小
4)代码提取
按钮状态:self.previous.Btn.enabled = (self.index !=1);
5)用数组进行数据封装
首先定义一个数组,然后实现数组的getter方法对数据进行懒加载

@property (strong,nonatomic) NSArray *datas;
-(NSArray *)datas
{
if(_datas==nil){
NSDictionary *dict1 = @{@“icon”:@“biaoqingdi”,@“desc”,@“在他面前,其他神马表情都弱爆了”};
NSDictionary *dict2 = @{@“icon”:@“wamgba”,@“desc”:@“哥们为什么选8号呢”};
_datas = @[dict1,dict2];
}
return _datas;
}

最后修改change方法

-(void)change
{
self.imageLabel.text = [NSString stringWithFormat:@“%d/%d”,sefl.index,self.datas.count];
NSDictionary *data = [self.datas[self.index-1]];
self.imageView.image = [UIImage imageNamed:data[@“icon”]];
self.descLabel.text =data[@“desc”];
self.previousBtn.enabled = (self.index !=1);
self.nextBtn.enabled = (self.index != self.data.count);
}

6)用plist封装数据
首先创建plist文件,添加数据
要往字典中添加数据要把它展开,点击+生成一条平级的数据
双击编辑内容
利用plist获取数据,并生成数组对象

-(NSArray *)datas
{
if_datas == nil)
{
NSString *path = [[NSBundle mainBundle] pathForResource:@“imageData” ofType:@“plist”];
_datas = [NSAAray arranyWithContentsOfFile:path];
}
return _datas;
}

2015年07月02日11:20:30
汤姆猫分析2
1.要播放帧动画,不能用按钮,要用UIImageView控件对象
2.执行帧动画的三个步骤
1)提供播放帧动画所需要的图片.帧动画是多张图片构成的所以需要一个UIImage数组
2)要将这个UIImage的数组赋值给UIImageView的animationImages属性
3)开始执行动画
代码实现

-(IBAction)drink
{
//当一个方法有一个返回值,且没有形参的时候,是可以通过点语法经行调用的
if(self.tomcatImage.isAnimating){
return;
}
int imageCount = 80;
NSMutableArray *images = [NSMutableArray arrayWithCapacity:imageCount];
for(int i=0;i<imageCount;i++){
NSString *imageName = [NSString stringWithFormat:@“drink_%02d”,i];
UIImage *image = [UIImage imageNamed:imageName];
[images addObject:image];
}
self.tomcatImageView.animationImages = images;
self.tomcatImageView.animationDuration = imageCount *0.05;
self.tomcatImageView.animationRepeatCount =1;
[self.tomcatImageView startAnimating];
}

3.代码抽取
相同的代码直接方法中抽取,不同的通过参数传入