Swift 4 / Xcode - 显示从Array / Struct到CATextLayer()

时间:2018-02-16 22:08:38

标签: ios swift catextlayer

我正在努力让它发挥作用。

我有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那样对待它,所以这可能是我的垮台。但是我的选项已经用完了,只是无法让它工作。

谢谢。

0 个答案:

没有答案