2017-08-22 3 views
1

Hat es jemand geschafft, einen SCNText-String ordnungsgemäß in einem containerFrame in ARKit zu erhalten?SCNText, containerFrame, wrapping und ARKit

Ich habe es versucht, aber die Linien scheinen übereinander zu liegen, anstatt vertikal in der Reihenfolge gerendert zu werden. Wenn es ein Problem mit der Größe des containerFrame war, der zu klein ist, würde ich erwarten, dass die Zeichenkette gerade abgeschnitten wird. Es macht keinen Unterschied machen, die Abschneidemodus I (... end/... keine/..middle) usw.

https://www.dropbox.com/s/hfe01fm2bfvuvs0/IMG_1E372152586C-1.jpeg?dl=0

Diese verwenden ist Code aus meiner SCNNode Unterklasse, die extrudierte Erstellen von Text in der init-Methode. Derselbe Code funktioniert gut (offensichtlich mit unterschiedlichen Größen), um in einer standardmäßigen SceneKit-Ansicht umschlossenen, extrudierten Text zu erzeugen.

let extrudedText = SCNText(string: definition.text, extrusionDepth: 0.1) 
    extrudedText.font = UIFont(name: definition.fontname, size: 0.2)! 

    extrudedText.containerFrame = CGRect(origin: .zero, size: CGSize(width: 1.8, height: 1.5)) 
    extrudedText.truncationMode = kCATruncationMiddle 
    extrudedText.isWrapped = true 
    extrudedText.alignmentMode = kCAAlignmentLeft 


    let material = SCNMaterial.material(named: "rustediron-streaks") 
    extrudedText.materials = [material] 
    geometry = extrudedText 

    // Update pivot of object to its center 
    // https://stackoverflow.com/questions/44828764/arkit-placing-an-scntext-at-a-particular-point-in-front-of-the-camera 
    let (min, max) = boundingBox 
    let dx = min.x + 0.5 * (max.x - min.x) 
    let dy = min.y + 0.5 * (max.y - min.y) 
    let dz = min.z + 0.5 * (max.z - min.z) 
    pivot = SCNMatrix4MakeTranslation(dx, dy, dz) 

Antwort

2

Antwort von Apple: meine Schriftgröße war zu klein. Wenn ich eine "normale" Schriftgröße und einen Rahmen für das SCNText-Objekt verwende und anschließend eine Skalierung für den Knoten festlege, der sie enthält, wird alles wie erwartet umbrochen. Etwas wie:

extrudedText.font = UIFont(name: definition.fontname, size: 20)! 
extrudedText.containerFrame = CGRect(origin: .zero, size: CGSize(width: 100.0, height: 500.0)) 
... 
scale = SCNVector3Make(0.01, 0.01, 0.01)