-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSKMultiLineAttributedTextLabel.swift
More file actions
108 lines (63 loc) · 2.85 KB
/
SKMultiLineAttributedTextLabel.swift
File metadata and controls
108 lines (63 loc) · 2.85 KB
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//
// SKMultiLineAttributedLabel.swift
//
//
// Created by StarkLiew on 23/1/17.
// Copyright © 2017 StarkLiew. All rights reserved.
//
import SpriteKit
class SKMultiLineAttributedLabel: SKNode{
public var text:String
private var texts:[String] = []
private var attibutedTexts:[SKLabelNode] = []
public var spriteNode: SKSpriteNode
init(text: String, width: CGFloat, height: CGFloat, color: UIColor){
self.spriteNode = SKSpriteNode(color: color, size: CGSize(width: width, height: height))
self.text = text
self.texts = self.text.characters.split{$0 == " "}.map(String.init)
self.spriteNode.anchorPoint = CGPoint(x: 0.5, y: 1)
self.spriteNode.zPosition = 0
super.init()
self.addChild(self.spriteNode)
self.makeLabel()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func makeLabel(){
for i in 0..<texts.count {
let label = SKLabelNode(text: texts[i])
label.color = UIColor.black
label.fontSize = 60
label.fontName = "Avenir-Heavy"
label.fontColor = UIColor.white
label.zPosition = 1
label.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.left
self.attibutedTexts.append(label)
}
let initialX = self.spriteNode.frame.minX + 20
let initialY = self.spriteNode.frame.maxY - self.attibutedTexts[0].frame.height - 10
var nextX = initialX
var nextY = initialY
var widths = CGFloat(0.0)
for i in 0..<self.attibutedTexts.count{
let item = self.attibutedTexts[i]
widths = widths + item.frame.width
if(widths > (self.spriteNode.frame.width/1.5)){
nextX = initialX
nextY = nextY - self.attibutedTexts[0].frame.height - 10
widths = CGFloat(0.0)
}
let box = SKSpriteNode(color: UIColor.clear, size: CGSize(width: item.frame.size.width, height: item.frame.height))
box.position = CGPoint(x: nextX, y: nextY)
box.addChild(item)
box.anchorPoint = CGPoint(x: 0.5, y: 0)
box.name = "label" + String(i)
self.spriteNode.addChild(box)
nextX = nextX + item.frame.width + CGFloat(10)
}
}
public func attributedText(index: Int) -> SKLabelNode{
return self.spriteNode.childNode(withName: "label" + String(index))?.children[0] as! SKLabelNode
}
}