iOS应用管理(优化)
//
// ViewController.m
// 01-应用管理

// Created by apple on 17-5-14.
// Copyright (c) 2017年 All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,strong)NSArray *apps;
@end
@implementation ViewController
- (NSArray *)apps{
if (_apps == nil) {
// 1.获取plis文件的路径
NSString *path = [[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
// 2.读取文件
_apps = [NSArray arrayWithContentsOfFile:path];
}
return _apps;
}
- (void)viewDidLoad {
[super viewDidLoad];
// 1.设置frame的相关属性
CGFloat appViewW = 100;
CGFloat appViewH = 120;
CGFloat spaceX = 20;
CGFloat spaceY = 30;
CGFloat topMargin = 30;
CGFloat leftMargin = ( self.view.frame.size.width - 3 * appViewW - 2 *spaceX) *0.5;
// 2.创建格子
for (int i = 0; i < self.apps.count; i ++) {
// 2.1创建一个格子视图
UIView *appView = [[UIView alloc]init];
int row = i /3;//行号
int col = i % 3;//列号
CGFloat appViewX = leftMargin + (appViewW + spaceX)*col;
CGFloat appViewY = topMargin + (appViewH + spaceY )*row;
// 2.2设置frame
appView.frame = CGRectMake(appViewX, appViewY, appViewW, appViewH);
// 2.3添加
[self.view addSubview:appView];
// appView.backgroundColor = [UIColor redColor];//设置背景色
NSDictionary *dict = self.apps[i];
// 2.4添加图片
UIImageView *head = [[UIImageView alloc]init];
CGFloat headW = 60;
CGFloat headX = (appViewW - headW) *0.5;
CGFloat headY = 0;
CGFloat headH = 60;
head.image = [UIImage imageNamed:dict[@"icon"]];
head.frame = CGRectMake(headX, headY, headW, headH);
[appView addSubview:head];
// head.backgroundColor = [UIColor blueColor];
// 2.5添加label
// 2.5.1 创建一个文本标签
UILabel *nameLabel = [[UILabel alloc]init];
CGFloat nameLabelX = 0;
CGFloat nameLabelY = headY + headH;
CGFloat nameLabelW = appViewW;
CGFloat nameLabelH = 30;
nameLabel.frame = CGRectMake(nameLabelX, nameLabelY, nameLabelW, nameLabelH);
[appView addSubview:nameLabel];
// nameLabel.backgroundColor = [UIColor grayColor];
nameLabel.text = dict[@"name"];
// 2.5.2设置文字大小
nameLabel.font = [UIFont systemFontOfSize:13];
// 2.5.3设置文字居中
nameLabel.textAlignment = NSTextAlignmentCenter;
// 2.6添加button
UIButton *downLoadBtn = [[UIButton alloc]init];
CGFloat downLoadBtnX = 10;
CGFloat downLoadBtnY = nameLabelY + nameLabelH + 10;
CGFloat downLoadBtnW = appViewW - downLoadBtnX *2;
CGFloat downLoadBtnH = 30;
downLoadBtn.frame = CGRectMake(downLoadBtnX, downLoadBtnY, downLoadBtnW, downLoadBtnH);
[appView addSubview:downLoadBtn];
// downLoadBtn.backgroundColor = [UIColor greenColor];//设置背景色
[downLoadBtn setTitle:@"下载" forState:UIControlStateNormal];//设置文字
[downLoadBtn setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal];
[downLoadBtn setBackgroundImage: [UIImage imageNamed:@"buttongreen_highlighted"] forState:UIControlStateHighlighted];
// downLoadBtn.
// 按钮内部至少有两个控件,一个label,一个imageView,
downLoadBtn.titleLabel.font = [UIFont systemFontOfSize:14];
}
}
@end
iOS应用管理(优化)的更多相关文章
- iOS项目分析及优化
iOS项目分析及优化 来源:吴白的简书 从代码看一个程序员的笔力 从代码的整洁度上就可以看出一个程序员的实力,规范其实就是让你养成一种良好习惯的标杆,在此面前我们应该顺从.本篇我们以OC为例,统 ...
- iOS程序性能优化
iOS程序性能优化 一.初级 使用ARC进行内存管理 在iOS5发布的ARC,它解决了最常见的内存泄露问题.但是值得注意的是,ARC并不能避免所有的内存泄露.使用ARC之后,工程中可能还会有内存泄露, ...
- iOS内存管理 ARC与MRC
想驾驭一门语言,首先要掌握它的内存管理特性.iOS开发经历了MRC到ARC的过程,下面就记录一下本人对iOS内存管理方面的一些理解. 说到iOS开发,肯定离不开objective-c语言(以下简称OC ...
- iOS 程序性能优化
前言 转载自:http://www.samirchen.com/ios-performance-optimization/ 程序性能优化不应该是一件放在功能完成之后的事,对性能的概念应该从我们一开始写 ...
- iOS内存管理(objective-c)
移动app开发中,由于移动设备内存的限制,内存管理是一个非常重要的话题.objective-c的内存管理,不仅是面试当中老生常谈的一个必问话题,也是日常项目开发中,特别需要重视的环节.对于笔者这种以j ...
- 【iOS Instrument性能优化集】
iOS Instrument性能优化集 1.UIImage缓存取舍 在项目代码中看到大量使用如下代码: UIImage使用 在Main Thread中发现不同动画场景中Image IO 开销和耗时所占 ...
- iOS内存管理
iOS内存管理的方式是引用计数机制.分为MRC(人式引用计数)和ARC(自动引用计数). 为什么要学习内存管理? 内存管理方式是引用计数机制,通过控制对象的引用计数来实现操作对象的功能.一个对象的生命 ...
- 【Bugly干货分享】iOS内存管理:从MRC到ARC实践
Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 对于iOS程序员来说,内存管理是入门的 ...
- iOS内存管理个人总结
一.变量,本质代表一段可以操作的内存,她使用方式无非就是内存符号化+数据类型 1.保存变量有三个区域: 1>静态存储区 2>stack 3>heap 2.变量又根据声明的位置有两种称 ...
随机推荐
- Xcode 常用调试技巧总结
NSLog,po命令和普通断点调试相信每个iOS开发者都会,这里就不作介绍了. 一.Memory Graph Xcode8新增:Memory Graph解决闭包引用循环问题 有很多叹号说明就有问题了. ...
- 给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合
给定数组a[1,2,3],用a里面的元素来生成一个长度为5的数组,打印出其排列组合 ruby代码: def all_possible_arr arr, length = 5 ret = [] leng ...
- java WSDL接口webService实现方式
一.使用JDK生成WSDL的对象类 1.cmd进入JDK的bin文件中 执行命令 wsimport -keep -p com.demo.client http://localhost:8080/Dem ...
- 微信app支付
http://www.bubuko.com/infodetail-1062014.html 要完成手机APP跳转到微信的APP进行微信支付,需要进行如下操作: 1.先去微信的开放平台(http://o ...
- 10个很棒的学习Android 开发的网站
1. Android Developers 作为一个Android开发者,官网的资料当然不可错过,从设计,培训,指南,文档,都不应该错过,在以后的学习过程中慢慢理解体会. 2. Android Gui ...
- 使用嵌入式关系型SQLite数据库存储数据
除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库—SQLite, 1.SQLite3支持 ...
- 系统服务中没有Windows Installer服务怎么办
在安装软件时,发现安装不了,提示没有Windows Installer服务,到系统服务中一看,果真没有这一项,这是什么问题呢? 出现这种情况,多为与Windows Installer服务相关的文件丢失 ...
- c#asp.net url 传递中文参数要使用 System.Web.HttpUtility.UrlEncode 而不能使用Server.UrlEncode
最近网站里的参数包括中文的例如: http://www.taiba/Tag%b0%ae%c7%e9.html 已开始使用 Server.UrlEncode来做的,但发现,有一些中文在url重写的是说找 ...
- jdk动态代理与cglib动态代理例子
1.JAVA的动态代理特征:特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象 ...
- php实现ZIP压缩文件解压缩(转)
测试使用了两个办法都可以实现: 第一个:需要开启配置php_aip.dll <?php //需开启配置 php_zip.dll //phpinfo(); header("Content ...