NSOpenGLViewを動的に作成する方法を簡単にまとめます。
所謂Programmaticallyに作成する、もしくはwithout Interface Builderと巷で言われているものです。
単純にview上に作成する
これは、他のオブジェクトと似たやり方です。
view
//1)NSOpenGLViewを作成
let gl = (NSOpenGLView(frame: CGRectMake(10,10,100,100),pixelFormat:nil)!)
//2)NSOpenGLView内に描写する為のクラスをインスタンス化
let gltest = OpenGLMainViewer(frame:CGRectMake(10,10,100,300),processID:"MainViewer")
//3) 2)のクラスで描写した内容をNSOpenGLViewに渡す
gl.addSubview(gltest!)
//4)最後に、NSOpenGLViewをviewcontoroller上に追加する
self.view.addSubview(gl)
1)の時に、pixelFormatはnilでOKです。
pixelFormatは、OpenGLMainViewerクラス内で定義しています。
Scroll View上に作成する
複数のNSOpenGLViewをScroll View上に作成して、スクロールしたい場合に有効
view
@IBOutlet weak var scroll: NSScrollView!
self.scroll.documentView! = gl
このとき、self.view.addSubview(gl)とself.scroll.documentView! = glを併用すると、後に書いた方のみが有効になる。
view
//無効
self.view.addSubview(gl)
//有効
self.scroll.documentView! = gl
しかしながら、以下のように書くと作成されない...
view
self.scroll.addSubview(gl)
この場合、
scrollViewを動的に作成、そこにdocumentViewでNSOpenGLViewを格納し、その上で動的に作成したscrollViewをaddSubViewに格納すると良い。
view
//NSOpenGLView作成
var gl = (NSOpenGLView(frame: CGRectMake(100,100,300,100),pixelFormat:nil)!)
//描写内容
var gltest = OpenGLMainViewer(frame:CGRectMake(100,100,300,100),processID:"MainViewer")
//描写内容をNSOpenGlViewに格納
gl.addSubview(gltest!)
//scroll viewを作成
var scroll1 = NSScrollView(frame: CGRectMake(100,100,300,100))
//scroll viewにNSOpenGLViewを格納
scroll1.documentView = gl
//scroll1 を 大元のscroll viewにaddSubView!
self.scroll.addSubview(scroll1)
他に何か良いやり方がありそうな...