我该如何解决“无法将类型 'CATextLayerAlignmentMode' 的值分配给类型 'String'?”

How may I solve 'Cannot assign value of type 'CATextLayerAlignmentMode' to type 'String'?

func createNewBubbleParentNode(_ text: String) -> SCNNode {
    let billBoardConstraint = SCNBillboardConstraint()
    billBoardConstraint.freeAxes = SCNBillboardAxis.Y
    
    let bubble = SCNText(string: text, extrusionDepth: CGFloat(bubbleDepth))
    var font = UIFont(name: "Futura", size: 0.15)
    bubble.font = font
    bubble.alignmentMode = kCAAlignmentCenter
    
    return bubbleNodeParent
}

如何解决“无法使用此类函数将类型 'CATextLayerAlignmentMode' 的值分配给类型 'String'?

感谢您的回答!!

洛伊克

我认为您需要将 kCAAlignmentCenter 替换为 CATextLayerAlignmentMode.center.rawValue

您只需使用一个值 CATextLayerAlignmentMode.center.rawValue。这个值不仅在 iOS 中使用,而且在 macOS 中也使用。

bubble.alignmentMode = CATextLayerAlignmentMode.center.rawValue

这是完整的代码版本:

import ARKit

class ViewController: UIViewController {

    @IBOutlet var sceneView: ARSCNView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        sceneView.scene = SCNScene()
        
        let textNode = self.createBubbleNode("SceneKit")
        sceneView.scene.rootNode.addChildNode(textNode)

        sceneView.session.run(ARWorldTrackingConfiguration())
    }
    
    func createBubbleNode(_ text: String) -> SCNNode {            
        let bubble = SCNText(string: text, extrusionDepth: 0.02)
        bubble.font = UIFont(name: "Futura", size: 0.15)
        bubble.firstMaterial?.diffuse.contents = UIColor.red
        bubble.alignmentMode = CATextLayerAlignmentMode.center.rawValue
        let bubbleNode = SCNNode(geometry: bubble)
        return bubbleNode
    }
}