LoginSignup
2
2

More than 5 years have passed since last update.

[Swift][OpenGL] swiftでNSOpenGLViewを動的に作成する方法

Posted at

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)

他に何か良いやり方がありそうな...

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2