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.变量又根据声明的位置有两种称 ...
随机推荐
- Struts1与Struts2的那些事
一.概述 Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的全部请求.Struts1框架有3个重要组成部分:Action.ActionForm和Act ...
- Oracle的关于小数的使用
整理了部分Oracle的关于小数的使用方法,如下 --round(x,[y]) 舍入到小数点右边y位的x值 ) from dual; --1.235 --trunc(x,[y])返回截尾到y位小数的x ...
- Silverlight for Windows Phone开发系列课程
Silverlight for Windows Phone开发系列课程(1):Windows Phone平台概况 课程简介:本节开始介绍系列课程的概况,包括课程内容,先决条件,学习目的 ...
- JavaScript 消息框,警告框,确认框,提示框
1.警告框 警告框经常用于确保用户可以得到某些信息. 当警告框出现后,用户需要点击确定按钮才能继续进行操作. 语法: alert("文本") 2.确认框 确认框用于使用户可以验证或 ...
- SIGTERM等信号含义【转】
主要是做sigterm 和sigkill区别的比较,之前的好多操作,在结束正在运行的一个程序的时候,常用kill,这个以后的注意,在sigterm不起作用的时候,再使用kill; 原文地址:http: ...
- springboot(六):如何优雅的使用mybatis
这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较喜欢jpa这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis.到网上找了一下关于spring boot ...
- linux达人养成计划学习笔记(五)—— 关机和重启命令
一.shutdown 1.格式: shutdown [选项] 时间(now) 选项: -c: 取消前一个关机命令 -h: 关机 -r: 重启 2.程序放入后台执行: shutdown -r 时间 &a ...
- 关于使用coreseek并为其做分页的介绍(转)
coreseek 做分页时找数据总量还真不好找.以为他会给一个方法(函数)什么的去获取,结果却不是.首先需要了解:num_matches: 当前返回的结果数,<= limit设置值.max_ma ...
- Android----Thread+Handler 线程 消息循环(转载)
近来找了一些关于android线程间通信的资料,整理学习了一下,并制作了一个简单的例子. andriod提供了 Handler 和 Looper 来满足线程间的通信.例如一个子线程从网络上下载了一副图 ...
- 【Spring】SpringMVC之上传文件
这里笔者介绍利用SpringMVC上传图片的操作. 步骤 1. 引入jar文件 不仅需要导入开发SpringMVC相关的包,还需要导入 commons-fileupload-1.2.1.jar 和 ...