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.
}
} |