首页 > 代码库 > 1-10(退出键盘,设置按钮的背景图,transform属性,imageView序列帧动画,九宫格算法...)
1-10(退出键盘,设置按钮的背景图,transform属性,imageView序列帧动画,九宫格算法...)
(1-10目录)
1.取得2个文本输入框的值
2.退出键盘
3.设置按钮的背景图
4.执行动画
5.手动创建按钮以及设置按钮的一些基本属性
6 transform属性
7.imageView序列帧动画
8.九宫格算法
9.通过xib创建局部控件,利用模型封装加载数据
10设置状态栏的样式为白色
{
扯淡环节:
工作这么久了, 发现一些细节有时候总是忽略, 现在就把我刚接触时的知识点给整理出来!,
没事自己看看, 也分享给大家!
分享,创造快乐!哈哈
xq每天都生活在快乐当中, 愿你们也是!
}
1.取得2个文本输入框的值
NSString *text1 = self.num1.text;
NSString *text2 = self.num2.text;
2.退出键盘
// 第一响应者:叫出键盘的那个控件
// 不当第一响应者(就会把键盘退下)
[self.num1 resignFirstResponder];
[self.view endEditing:YES];//退出键盘
// 不允许直接修改 对象的 结构体属性的成员
// 允许直接对象的结构体属性
3.设置按钮的背景图,
UIImage *image = [UIImage imageNamed:@"btn_01"];//根据图片名创建一张图片
[btn setBackgroundImage:image forState:uicontrolstate];//设置按钮在背景图片
4.执行动画
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.0];//动画执行的时间
中间部分为要执行的动画代码
[UIView commitAnimations];
5.手动创建按钮以及设置按钮的一些基本属性
UIButton *btn = [[UIButton alloc] init];//创建按钮
[self.view addSubview:btn];//把创建的按钮添加到父控件当中
btn.frame = CGRectMake(50, 50, 100, 100);//设置按钮的位置以及大小
UIImage *normal = [UIImage imageNamed:@"btn_01"];//通过文件名加载图片(凡是PNG图片,都不用加拓展名)
[btn setBackgroundImage:normal forState:UIControlStateNormal];//设置普通状态下的背景图片
UIImage *high = [UIImage imageNamed:@"btn_02"];
[btn setBackgroundImage:high forState:UIControlStateHighlighted];//加载高亮的图片
[btn setTitle:@"点我啊" forState:UIControlStateNormal];//设置按钮在普通状态下的文字
[btn setTitle:@"摸我干啥" forState:UIControlStateHighlighted];//设置按钮在高亮状态下的文字
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];//设置按钮在普通状态下的文字的颜色
[btn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];//设置按钮在高亮状态下的文字颜色
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];监听按钮点击,当按钮点击时调用btnClick:方法
btn2.center = CGPointMake(250, 250);//设置按钮的中点位置
6 transform属性
btn.transform = CGAffineTransformMakeRotation(-M_PI_4);//设置按钮的旋转属性,但不是在上一次的基础上进行旋转的,一直是相对于它最初的位置来讲的
btn.transform = CGAffineTransformRotate(head.transform, M_PI_4);//设置按钮在原来的基础上进行旋转45度,角度是正数:顺时针, 角度是负数:逆时针
head.transform = CGAffineTransformMakeTranslation(0, -100);//平移属性,,不是在上一次的基础上进行平移,一直是相对于它最初的位置来讲的
head.transform = CGAffineTransformTranslate(head.transform, 0, -100);在上一次的基础上进行平移
head.transform = CGAffineTransformMakeScale(1.5, 1.5);//缩放属性,1.5为缩放的比例,缩放比例小于1,是为缩小,大于1是为放大不是在上一次的基础上进行缩,一直是相对于它最初的位置来讲的
head.transform = CGAffineTransformScale(head.transform, 1.5, 1.5);在上一次的基础上进行缩放
UIButton *head = (UIButton *)[self.view viewWithTag:10];//获也Tag为10的那个按钮
7.imageView序列帧动画
- (void)runAnimationWithCount:(int)count name:(NSString *)name
{
if (self.tom.isAnimating) return;//如果动画正在播放,不允再继续播放
NSMutableArray *images = [NSMutableArray array];//创建一个可变数组,存放所有的图
for (int i = 0; i<count; i++) {
NSString *filename = [NSString stringWithFormat:@"%@_%02d.jpg", name, i];//根据传入的参数拼接图片名
NSBundle *bundle = [NSBundle mainBundle];//获取应用程序的资源路径
NSString *path = [bundle pathForResource:filename ofType:nil];//根据文件名获取该文件在应用程序中的资源路径
UIImage *image = [UIImage imageWithContentsOfFile:path];//根据图片的路径获取一张图片
[images addObject:image];//把图片添加到可变数组中
}
self.tom.animationImages = images;//按顺序播放数组images中的图片
self.tom.animationRepeatCount = 1;//调置播放的次数
self.tom.animationDuration = images.count * 0.05;//设置播放的时间
[self.tom startAnimating];//开始播放动画
CGFloat delay = self.tom.animationDuration + 1.0;//播放完毕一秒后清除内存
[self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:delay];
}
注意:
用UIImage *image = [UIImage imageNamed:filename];获取图片会有缓存
UIImage *image = [UIImage imageWithContentsOfFile:path];//根据图片的路径获取一张图片,用这种方法获取的图片没有缓存
8.九宫格算法
int totalColumns = 3;//总列数(一行最多3列)
CGFloat appW = 85;//九宫格内部控件的宽度
CGFloat appH = 90;//九宫格内部控件的高度
间隙 = (控制器view的宽度 - 总列数 * 内部控件宽度) / 总列数+1
CGFloat marginX = (self.view.frame.size.width - totalColumns * appW) / (totalColumns + 1);
CGFloat marginY = 15;
for (int index = 0; index<self.apps.count; index++) {
UIView *appView = [[UIView alloc] init];
appView.backgroundColor = [UIColor redColor];
int row = index / totalColumns;//计算当前所在的行
int col = index % totalColumns;//计算当前所在的列
CGFloat appX = marginX + col * (appW + marginX);//计算当前控件的x值 (间隔+当前所在的列*(控件的宽度+一个间隔));
CGFloat appY = 30 + row * (appH + marginY);//计算当前控件的y值 (第一个控件Y的值 + 当前所在的行* (控件的高度 + 一个间隔));
appView.frame = CGRectMake(appX, appY, appW, appH);//设置内部控件的位置和大小
[self.view addSubview:appView];//把创建的控件添加到控制器View当中
}
9.通过xib创建局部控件,利用模型封装加载数据
1.创建一个模型XQApp来封装从plist文件文件中读取的数据.模型中要提供两个方法来来初始化模型
- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)appWithDict:(NSDictionary *)dict;
- (instancetype)initWithDict:(NSDictionary *)dict
{
if (self = [super init]) {
self.name = dict[@"name"];
self.icon = dict[@"icon"];
}
return self;
}
+ (instancetype)appWithDict:(NSDictionary *)dict//根据字典加载模型
{
return [[self alloc] initWithDict:dict];
}
2.在控制器当中定义一个NSArray数组*apps,用来存放每一个封装好了的模型.采用懒加载方式,重写get方法
- (NSArray *)apps
{
if (_apps == nil) {//判断数组中是否为空, 如果为空的放话,那么从plist文件加载数据.
NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];//获取app.plist文件的资源路径
NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];//从获取的路径中加载数组
NSMutableArray *tempAppArray = [NSMutableArray array];//定义一个临时存放每一个模型的可加变数组!
for (NSDictionary *dict in dictArray) {//遍历从plist文件中读取的数组
MJApp *app = [MJApp appWithDict:dict];//将数组中取出的每一个字典放传入到模型的初始化方法中, 给模型进行赋值,然后返回这个模型
[tempAppArray addObject:app];把返回的模型放到临时数组当中
}
_apps = appArray;//把临时数中赋值给控制器定义的,app数组中.
}
return _apps;
}
3.创建一个名为MJAppView.xib的Xib文件,在xib文件中拖放一个View,再往view中拖入其它的子控件.
4.创建一个继承UIView类, 名为MJAppView,把xib的Custom Class中的class改为MJAppView
5.再把xib中的子控件拖线连到MJAppView中,做为MJAppView的属性.
6.在MJAppView头文件定义一个MJApp *app;履性,然后重写app的set方法,给内总属性进行赋值
- (void)setApp:(MJApp *)app
{
_app = app;
self.iconView.image = [UIImage imageNamed:app.icon];
self.nameLabel.text = app.name;
}
用来存入传入过来的模型数据.再提供一个类方法用来加载xib文件,并传入一个模型,给MJAppView中的app,属性时赋值,
+ (instancetype)appViewWithApp:(MJApp *)app;
+ (instancetype)appViewWithApp:(MJApp *)app
{
NSBundle *bundle = [NSBundle mainBundle];
NSArray *objs = [bundle loadNibNamed:@"MJAppView" owner:nil options:nil];//读取xib文件(会创建xib中的描述的所有对象,并且按顺序放到数组中返回)
MJAppView *appView = [objs lastObject];//获得返回xib对象数组中的最后一个元素
appView.app = app;//给MJAppView中的app属性进行赋值,就会调用上面的set方法
return appView;//返回加载好的对象
}
7.在控件器当中创建给MJAppView对象
MJAppView *appView = [MJAppView appViewWithApp:self.apps[index]];//index为控制器中app对象数组中的下标
[self.view addSubview:appView];
10设置状态栏的样式为白色
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;//状态栏的样式为白色
}