2014-08-31 1 views
0

J'ai essayé d'apprendre à faire un dessin personnalisé sous OS X. J'essaye d'imbriquer un NSTextView dans un NSView.Appkit/Quartz/CG Imbrication de NSTextView dans une vue personnalisée correctement

Got top, want bottom

Je ne peux pas à comprendre l'étape que je suis absent pour obtenir le NSTextView à se comporter comme si elle n'a pas été intégré dans une autre vue personnalisée (texte devrait commencer redering du haut gauche dans le cadre fourni au NSTextView, de gauche à droite et de haut en bas).

import Cocoa 
import AppKit 
import XCPlayground 

class MyView : NSView { 
    let lipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 

    override init(frame: NSRect) { 
     super.init(frame:frame) 
     self.wantsLayer = true 
    } 

    required init(coder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func drawRect(dirtyRect: NSRect) { 
     super.drawRect(dirtyRect) 

     let grey = NSColor.grayColor() 
     self.layer?.backgroundColor = grey.CGColor 

     let boundaryRect = NSInsetRect(dirtyRect, 10, 10) 
     let textRect = NSInsetRect(boundaryRect, 10, 10) 

     let path = NSBezierPath(roundedRect: boundaryRect, xRadius: 5, yRadius: 5) 
     path.stroke() 


     let text = NSTextView(frame: textRect) 

     text.backgroundColor = grey 
     text.insertText(lipsum) 

     text.drawRect(textRect) 
    } 
} 

var frame = NSRect(x: 0, y: 0, width: 400, height: 400) 

let myView = MyView(frame: frame) 

let textView = NSTextView(frame:frame) 
textView.insertText(myView.lipsum) 

XCPShowView("my view", myView) 
XCPShowView("text view", textView) 

Répondre

1

Vous n'avez pas réellement intégré la vue text dans la vue parente. Vous pouvez le faire avec addSubview().

let text = NSTextView(frame: textRect) 

    text.backgroundColor = grey 
    text.insertText(lipsum) 

    self.addSubview(text) // <--------- 
} 
+0

Oui, c'est ce qu'il a fait. C'est simple. Apprendre en faisant a ses inconvénients;). Maintenant, je n'ai même pas besoin d'appeler dessiner sur l'enfant. –

+0

Apprendre en faisant, la façon la plus mémorable d'apprendre! – chuckus

Questions connexes