我正在努力让它发挥作用。
我有struct
来帮助通过每个.swift
文件传递数据。 (只有一个视图控制器)。
这是我的Message
类,其中文本图层和形状(SCNBox
)都被调用/创建。
struct MessagesStruct {
var text = String()
}
class Message: SCNNode {
public var messageDataArray = [MessagesStruct]()
public let textArray = Array<MessagesStruct>()
public let textLayer = CATextLayer()
override init() {
super.init()
let layer = CALayer()
layer.backgroundColor = UIColor.black.withAlphaComponent(0.8).cgColor
textLayer.frame = layer.bounds
textLayer.fontSize = 30
// generateTextOnLabel() -- Don't work
var data = String()
for each in Array<MessagesStruct>() {
data = each.text
}
textLayer.string = data
textLayer.alignmentMode = kCAAlignmentCenter
textLayer.foregroundColor = UIColor.white.cgColor
textLayer.display()
layer.addSublayer(textLayer)
textLayer.layoutIfNeeded()
textLayer.isWrapped = true
layer.layoutIfNeeded()
let box = SCNBox(width: 8.5, height: 1.25, length: 0.01, chamferRadius: 4)
box.firstMaterial?.locksAmbientWithDiffuse = true
self.geometry = box
let shape = SCNPhysicsShape(geometry: box, options: nil)
self.physicsBody = SCNPhysicsBody(type: .static, shape: shape)
self.physicsBody?.isAffectedByGravity = false
self.geometry?.firstMaterial?.diffuse.contents = layer
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func generateTextOnLabel() {
var dataToDisplay = String()
for data in textArray {
dataToDisplay = data.text
}
textLayer.string = dataToDisplay
}
}
这是我的ViewControler
课程,我已经删除了所有不相关的代码行,例如IBOulets等。
class ViewController: UIViewController, ARSCNViewDelegate, UITextViewDelegate {
@IBOutlet var sceneView: ARSCNView!
@IBOutlet var generateNotesButton: UIButton!
@IBOutlet var addNotesButton: UIButton!
@IBOutlet var saveButton: UIButton!
var messagesArray: [MessagesStruct] = []
var refToMessages = Message()
@IBAction func saveButton_TouchUpInside(_ sender: Any) {
var notes = MessageStruct()
notes.text = textView.text
messagesArray.append(notes)
}
@IBAction func generateNotes_TouchUpInside(_ sender: Any) {
for _ in 0...notesArray.count {
let messageNode = Message()
refToMessages.messagesDataArray.append(contentsOf: messagesArray)
sceneView.scene.rootNode.addChildNode(messageNode)
}
}
据我所知,数据是在我使用print
命令时传递的。但是,文本图层始终为空白。打印到控制台时,我可以使用.count
方法检索数组中的值和长度。但是有一个问题是试图让数组中的数据显示出来。我试图利用一个数组甚至一个结构但没有任何作用。只有当标签显示任何文本时,我才写下这样的文字:
textLayer.string = "Hello World"
您可以猜到,标签会显示消息Hello World
。
任何人都可以帮助我克服这个小问题吗?我从来没有使用过CATextLayer()
而我只是像UILabel
那样对待它,所以这可能是我的垮台。但是我的选项已经用完了,只是无法让它工作。
谢谢。