Java九宫格八个按钮_纯代码方式实现九宫格布局

这篇博客详细介绍了如何在iOS中通过代码实现九宫格布局,包括从plist文件加载应用信息,计算每个app视图的位置,设置图标、文字和下载按钮,以及响应点击事件。
摘要由CSDN通过智能技术生成

1 #import "ViewController.h"

2

3 @interfaceViewController ()4

5 /** 用于存放app信息*/

6 @property(nonatomic, strong)NSArray *apps;7

8 @end

9

10 @implementationViewController11

12 //懒加载

13 - (NSArray *)apps14 {15 if (!_apps) {16 //从plist文件中获取数据

17 NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist"ofType:nil];18 _apps =[NSArray arrayWithContentsOfFile:path];19 }20 return_apps;21 }22

23 - (void)viewDidLoad {24 [super viewDidLoad];25

26

27 //1. 布局九宫格的列数

28 NSInteger colsNum = 3;29

30 //2. 每个app的大小

31 CGFloat appW = 80;32 CGFloat appH = 90;33

34 //3. 设置每列之间的间距 = (控制器view的宽度 - 列数 * app的宽度) / 间隙数

35 CGFloat colsMargin = (self.view.frame.size.width - colsNum * appW) / (colsNum + 1);36 //设置每行之间的间距

37 CGFloat rowsMargin = 30;38

39 //4. 根据应用个数创建

40 for (int index = 0; index < self.apps.count; index++) {41 //4.1 创建app

42 UIView *appView =[[UIView alloc] init];43

44 //4.2 计算app的位置45 //4.2.1 计算行号和列号

46 int row = index /colsNum;47 int col = index %colsNum;48

49 //4.2.2 计算x和y(注意: 不要被手机顶部状态栏的高度(20)挡住)

50 CGFloat appX = colsMargin + col * (appW +colsMargin);51 CGFloat appY = rowsMargin + row * (appH +rowsMargin);52

53 //4.2.3 设置app的frame

54 appView.frame =CGRectMake(appX, appY, appW, appH);55

56 //4.3 添加到控制器的view

57 [self.view addSubview:appView];58

59 //4.4 设置app内部控件60 //4.4.1 index位置对应的应用信息

61 NSDictionary *appInfo =self.apps[index];62

63 //4.4.2 添加图标

64 UIImageView *iconView =[[UIImageView alloc] init];65

66 //4.4.3 设置图标位置

67 CGFloat iconW = 45;68 CGFloat iconH = 45;69 CGFloat iconX = (appW - iconW) * 0.5;70 CGFloat iconY = 0;71 iconView.frame =CGRectMake(iconX, iconY, iconW, iconH);72

73 //4.4.4 设置图片

74 iconView.image = [UIImage imageNamed:appInfo[@"icon"]];75 [appView addSubview:iconView];76

77 //4.4.5 添加文字

78 UILabel *nameLabel =[[UILabel alloc] init];79

80 //4.4.6 设置文字位置

81 CGFloat nameW =appW;82 CGFloat nameH = 20;83 CGFloat nameX = 0;84 CGFloat nameY = iconY +iconH;85 nameLabel.frame =CGRectMake(nameX, nameY, nameW, nameH);86

87 //4.4.7 设置文字

88 nameLabel.text = appInfo[@"name"];89 nameLabel.font = [UIFont systemFontOfSize:13];90 nameLabel.textAlignment =NSTextAlignmentCenter;91 [appView addSubview:nameLabel];92

93 //4.4.8 添加按钮

94 UIButton *downloadBtn =[[UIButton alloc] init];95

96 //4.4.9 设置按钮位置

97 CGFloat downloadX = 12;98 CGFloat downloadY = nameY +nameH;99 CGFloat downloadW = appW - 2 *downloadX;100 CGFloat downloadH = 20;101 downloadBtn.frame =CGRectMake(downloadX, downloadY, downloadW, downloadH);102

103 //4.4.10 设置按钮

104 [downloadBtn setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal];105 [downloadBtn setBackgroundImage:[UIImage imageNamed:@"buttongreen_highlighted"] forState:UIControlStateHighlighted];106 [downloadBtn setTitle:@"下载"forState:UIControlStateNormal];107 downloadBtn.titleLabel.font = [UIFont systemFontOfSize:13];108 [downloadBtn addTarget:self action:@selector(downloadClick) forControlEvents:UIControlEventTouchUpInside];109 [appView addSubview:downloadBtn];110 }111

112 }113

114 - (void)downloadClick115 {116 NSLog(@"%s", __func__);117 }118 @end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值