4.软件管理界面(九宫格)
目的:运用代码搭建一个九宫格模型,上面显示应用icon、应用名字和下载按钮点击按钮以后下载按钮变暗,同时提示信息。
分析:先根据屏幕尺寸计算每个格子合适位置,在每个位置建立一个小得UIView,然后在此UIView上面放UIImageView、UILabel、UIButton 三个控件。在界面的下方设置一个UILabel,透明度属性为0,在点击button后透明度由0变到1,然后在变成0。
效果展示:
1.代码实现:
#define kAppViewW 80 // 每个UIView的宽度
#define kAppViewH 100 // 每个UIView的高度
#define kColCount 3 // 每行的个数
#define kStartY 20 // 起始高度
#define kNo 12 // 应用个数
// 实例化applist文件
- (NSArray *)appList{if (_appList == nil) {NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle ]pathForResource:@"app.plist" ofType:nil]];// 创建一个临时数组NSMutableArray *arrayM = [NSMutableArray array];// 便利数组,一次转换模型for(NSDictionary *dict in array){AppInfo *appInfo = [[AppInfo alloc]initWithDict:dict];[arrayM addObject:appInfo];}_appList = arrayM;// 将临时数组为属性赋值}return _appList;
}- (void)viewDidLoad {
[super viewDidLoad];CGFloat marginX = (self.view.bounds.size.width - kColCount * kAppViewW) / (kColCount + 1);// 每列之间的距离(此处固定为20)CGFloat marginY = 20;for (int i = 0; i < kNo ; i++) {// 所在行数 0 1 2int row = i / kColCount;// 所在列数int col = i % kColCount;// 起始X的坐标CGFloat x = marginX + col * (marginX + kAppViewW);CGFloat y = kStartY + marginY + row * (marginY + kAppViewH);UIView *appView = [[UIView alloc]initWithFrame:CGRectMake(x, y, kAppViewW, kAppViewH)];[self.view addSubview:appView];AppInfo *appInfo = self.appList[i];// 1.UIImageViewUIImageView *icon = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, kAppViewW, 60)];icon.image = [UIImage imageNamed:appInfo.icon];// 设置显示格式icon.contentMode = UIViewContentModeScaleAspectFit;[appView addSubview:icon];// 2.UILabeUILabel *appName = [[UILabel alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(icon.frame) , kAppViewW, 20)];// 取出名字appName.text = appInfo.name;// 字体大小设置appName.font = [UIFont systemFontOfSize:13.0];// 设置显示格式appName.textAlignment = NSTextAlignmentCenter;[appView addSubview:appName];// 3.设置下载键0UIButton *download = [[UIButton alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(appName.frame), kAppViewW, 20)];// 背景图片[download setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal];[download setBackgroundImage:[UIImage imageNamed:@"buttongreen_highlighted"] forState:UIControlStateHighlighted];// 设置字体[download setTitle:@"下载" forState:UIControlStateNormal];download.titleLabel.font = [UIFont systemFontOfSize:12.0]; // 不区分状态[appView addSubview:download];// 添加按钮监听download.tag = i;[download addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];}}/* 按钮监听方法 */
- (void)click:(UIButton *)button
{// 取出appInfoAppInfo *appInfo = self.appList[button.tag];// 1.添加一个UILable到界面UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(80, 500, 160, 40)];lable.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.2];lable.text = [NSString stringWithFormat:@"%@已加入下载列表",appInfo.name];lable.font = [UIFont systemFontOfSize:12.0];lable.textAlignment = 1;[self.view addSubview:lable];// 点击一次后,就禁止点击button.enabled = NO;// 动画设置// 初始透明度 完全透明lable.alpha = 0.0 ;// 动画结束之后删除// ^表示是block 快代码,是一个预先准备好的快代码,可以当做参数传递,在需要的时候执行[UIView animateWithDuration:1.0 animations:^{// 要修改的动画属性lable.alpha = 1.0;} completion:^(BOOL finished) {[UIView animateWithDuration:1.0 animations:^{lable.alpha = 0.0 ;}completion:^(BOOL finished) {// 动画完成后,所做的操作[lable removeFromSuperview];}];}];
}
2.本人感想
1.本例题使用到一个方法,即字典转模型,在需要从字典取出一个图片或者Name时出现输入失误,在调试代码的时候出现错误,例如:
icon.image = [UIImage imageNamed:dict[@"icon]];
如果icon拼写错误,将会报错。首先定义一个AppInfo类,在实现中:
- (id)initWithDict:(NSDictionary *)dict
{self = [super init];if (self) {[self setValuesForKeysWithDictionary:dict];}return self;
}
2.block代码块的解读:使用1.0s的时间让UIView的透明度属性由0(全透明)变到1.0(不透明),然后再有1.0经过1.0s变到0,当完成这动作以后,remove这个UIView。
还有一种常用的动画设置方式:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelay:1.0];[UIView commitAnimations];
收尾式动画不容易监听结束,也不容易嵌套,所以在此不使用该方式。
3.还有一种可以搭建该界面的方法:利用XIB
首先建立一个XIB文件,New Files -> User Interface -> Empty或View
搭建一个尺寸、排布合适的自定义视图,然后在ViewController.m中加载。
// 从XIB加载自定义视图UIView *appView = [[[NSBundle mainBundle] loadNibNamed:@"View" owner:nil options:nil] lastObject];// 设置位置 XIBappView.frame = CGRectMake(x, y, kAppViewW, kAppViewH);[self.view addSubview:appView];
4.软件管理界面(九宫格)相关推荐
- 1.用Python写了一个进销存管理的软件~需求分析界面设计数据库设计技术路线选择~
一.需求分析 总体来说,就是一个在游泳馆使用的进销存管理软件,记录商品的入库.出库情况,以及统计销售的金额等~ 整个系统有三类用户,系统管理员.公司管理员和公司销售员,系统管理员负责录入公司信息以及分 ...
- 手机安全卫士——软件管理-用户程序和系统程序
首先看一下界面: AppManagerActivity .java //软件管理 public class AppManagerActivity extends Activity implements ...
- linux应用程序文件丢失,详谈Ubuntu软件管理丢失的功能
多数人都认为Ubuntu通过Ubuntu Software Center彻底改革了dpkg包管理.毫无疑问,按照多数人标准来看,Software Center肯定是用户友好的呢.但事实真是如此么?本文 ...
- MySQL 数据库图形化管理界面应用种草之 Navicat Premium 如何使用
文章目录 前言 一.工具/原料 二.安装和建立连接 2.1.连接本地数据库 2.2.连接远程数据库 三.Navicat Premium 的"增删改查"功能操作 3.1.数据库操作( ...
- Linux进阶之软件管理
本节内容 一.rpm:管理linux软件程序的 特点:安装方便 不能解决依赖关系 1.安装软件: -i: -v: -h: rpm -ivh 包名 2.卸载软件 -e: 清楚 rpm -e 程序名 3. ...
- RedHat系列软件管理(第二版) --脚本安装
RedHat系列软件管理 --脚本安装 一.解压缩 tar -zxvf webmin-1.700.tar.gz 二.进入相关目录 cd webmin-1.700 三.如果此时执行./configure ...
- (二)安装SVN服务器,web管理界面
总览: 基于Linux centos7 搭建内网服务器,并通过外网访问_紫气东来d的博客-CSDN博客 一.安装svn服务器subversion [root@localhost ~]# ifconfi ...
- 为 RSSBus Connect™ 管理界面配置多用户登录
大多数情况下,因为 RSSBus Connect™出众的稳定性和自动处理能力,用户并不需要经常登入管理界面查看状态.但是在有些特定的用例下(例如,未实现与现有内部系统的集成),用户需要更频繁的获取状态 ...
- ead开局 华三inode_03 EAD用户接入-受控软件管理-新华三集团-H3C
02-03 EAD用户接入-受控软件管理 版本声明:不同产品版本的界面可能存在差异,但是这种差异不影响该案例的使用. 案例下载方法:点击页面右上角"视频资料下载"链接下载附件,解压 ...
最新文章
- 在报No suitable driver found for jdbc:mysql情况下,我是如何一步一步实现jmeter成功连接mysql...
- shell脚本:一键安装LAMP、LNMP脚本
- 使用MNIST数据集,在TensorFlow上实现基础LSTM网络
- 微软2013暑期实习笔试题目第5题分析
- CPU 硬盘性能到底相差多少
- FP error code老是忘记的看这里:只给出最常用的几个。
- 怎么把外部参照合并到图纸_CAD图纸中插入的参照底图如何使用
- Spring框架----Confinguration和Component-Scan注解
- C# 多线程同步和线程通信
- 服务器主板阵列创建!创建磁盘阵列RAID0、RAID1图文方法
- RESTful源码笔记之RESTful Framework的基本组件
- 【KSZ8863】KSZ8863交换机芯片的信息汇总与打板验证结果
- 使用计算机粘贴板的步骤,教你查看win7电脑的剪切板使用技巧和位置查看的方法...
- presentation健身主题HTML,如何用英文做presentation
- Error creating bean with name ‘serverEndpointExporter‘ defined in class path resource
- illegal multibyte sequence
- KeyTool 和 OpenSSL 相互转换 [转]
- 属性子集选择的基本启发方法_【数据挖掘笔记三】数据预处理
- 使用 zk-SNARK 的可编程零知识证明:第 1 部分
- esp32c3 nvs存取大数组结构体方法
热门文章
- 开始做mvc 框架 家庭理财项目。
- FZU 2167 大王叫我来巡山呐
- linux下如何看网卡是千兆还是百兆的
- 我的情绪为何总被他人左右
- 中学校园计算机网络设计心得体会,中学校园网络组建论文设计
- 根除任务栏天猫618超级狂欢红包广告方法,亲测有用
- 华为云数据库 MySQL 内核新特性上线,首家彻底解决用户上云需改造应用的问题
- kodi添加局域网计算机,KODI怎么播放局域网内共享的4K电影/视频的图文教程
- html 酷狗音乐教程,酷狗音乐使用基础教程|酷狗音乐使用教程_好特教程
- 高等工程数学 —— 第二章 (1) Smith标准型与Jordan标准型