「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

ofxUIKit ofGetWidth取得タイミング

higaさんのofxUIKitを使っていて、ofGetwidth()とofGetHeight()の取得タイミングによっては0が返ってきてしまいます。

試したところ、

setup() viewDidLoad viewWillAppear viewDidAppear

上記メソッド内で取得しても0が返ってきます。

update()とdraw()ではOK。

ーーー

openframeworksViewControllerをみると、 drawFrame()内で初めてwindowSizeが設定されているので、 この様になってしまいます。

僕はsetupviewWillAppear内で初期化する方なので、 openframeworksViewControllerの初期化時点で、 サイズをセット出来る様にしたいなぁとおもって、 実際にopenframeworksViewControllerの、 どの時点でself.viewのサイズがセットされているか?を まず追ってみた。

※ちなみに、 openframeworksViewControllerのself.viewは、初期化(viewDidLoad)時点で、 ofEAGLViewに置き換えられているので、この時点ではサイズはw:0, h:0。

追ってみたところ、 viewWillAppearの時点で、 self.viewのframeが、(0, 20, 320, 460)となっていました。

もう1つちなみに、MainViewControllerのxibファイルは、 viewBasedExampleViewController.xibが指定されているので、 MainViewControllerのself.viewのサイズは、320x460となっています。

openframeworksViewControllerのviewWillAppearより上に、 changeWindowSize()を追加し、 viewWillAppear内とdrawFrame()内でコールする様に変更しました。

- (void)changeWindowSize
{
CGSize newSize = self.view.bounds.size;

if (windowSize.width != newSize.width || windowSize.height != newSize.height)
{
[self windowResized:newSize];
windowSize = newSize;
}
}

- (void)viewWillAppear:(BOOL)animated
{
[self changeWindowSize]; // これを追加

[self startAnimation];
[super viewWillAppear:animated];
}

- (void)drawFrame
{
[(ofEAGLView *)self.view setFramebuffer];

/*
CGSize newSize = self.view.bounds.size;

if (windowSize.width != newSize.width || windowSize.height != newSize.height)
{
[self windowResized:newSize];
windowSize = newSize;
}
*/
[self changeWindowSize]; //これを追加