Swift - 使用UIView给页面添加4×4方格
1,下面是一个利用UIView来给页面上绘制灰色方块的例子,效果图如下:

代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
import UIKit class ViewController : UIViewController { //游戏方格维度 var dimension: Int = 4 //数字格子的宽度 var width: CGFloat = 50 //格子与格子的间距 var padding: CGFloat = 6 //保存背景图数据 var backgrounds: Array < UIView >! override func viewDidLoad() { super .viewDidLoad() self .backgrounds = Array < UIView >() //改成主视图背景白色背景 self .view.backgroundColor = UIColor .whiteColor() setupGameMap() } func setupGameMap() { var x: CGFloat = 50 var y: CGFloat = 150 for i in 0..<dimension { println (i) y = 150 for j in 0..<dimension { //初始化视图 var background = UIView (frame: CGRectMake (x, y, width, width)) background.backgroundColor = UIColor .darkGrayColor() self .view.addSubview(background) //将视图保存起来,以备后用 backgrounds.append(background) y += padding + width } x += padding+width } } override func didReceiveMemoryWarning() { super .didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } |
2,进阶版 - 继承UIView实现自定义方块组件(有颜色和数字)

方块组件:TileView.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import UIKit class TileView : UIView { //颜色映射表,不同的数字颜色不同 let colorMap = [ 2: UIColor .redColor(), 4: UIColor .orangeColor(), 8: UIColor .yellowColor(), 16: UIColor .greenColor(), 32: UIColor .brownColor(), 64: UIColor .blueColor(), 128: UIColor .purpleColor(), 256: UIColor .cyanColor(), 512: UIColor .lightGrayColor(), 1024: UIColor .magentaColor(), 2048: UIColor .blackColor() ] //在设置值时,更新视图的背景和文字 var value: Int = 0{ didSet { backgroundColor = colorMap[value] numberLabel.text= "\(value)" } } var numberLabel: UILabel ! //初始化视图 init (pos: CGPoint , width: CGFloat , value: Int ) { numberLabel = UILabel (frame: CGRectMake (0,0, width, width)) numberLabel.textColor = UIColor .whiteColor() numberLabel.textAlignment = NSTextAlignment . Center numberLabel.minimumScaleFactor = 0.5 numberLabel.font = UIFont (name: "微软雅黑" , size:20) numberLabel.text = "\(value)" super . init (frame: CGRectMake (pos.x, pos.y, width, width)) addSubview(numberLabel) self .value = value backgroundColor = colorMap[value] } required init (coder aDecoder: NSCoder ) { super . init (coder : aDecoder) } } |
使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
import UIKit class ViewController : UIViewController { //游戏方格维度 var dimension: Int = 4 //数字格子的宽度 var width: CGFloat = 50 //格子与格子的间距 var padding: CGFloat = 6 //保存背景图数据 var backgrounds: Array < TileView >! override func viewDidLoad() { super .viewDidLoad() self .backgrounds = Array < TileView >() //改成主视图背景白色背景 self .view.backgroundColor = UIColor .whiteColor() setupGameMap() } func setupGameMap() { var x: CGFloat = 50 var y: CGFloat = 150 for i in 0..<dimension { println (i) y = 150 for j in 0..<dimension { //随机2的1~11次方 var val: Int = 2<< Int (arc4random_uniform(10)) //初始化视图 var background = TileView (pos: CGPoint (x:x,y:y), width: self .width, value: val) self .view.addSubview(background) //将视图保存起来,以备后用 backgrounds.append(background) y += padding + width } x += padding+width } } override func didReceiveMemoryWarning() { super .didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } |
分类:
Swift语言
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2014-09-25 Android 出现警告Exported service does not require permission
2013-09-25 Android中的JSON详细总结