我已经延迟访问view.drawableHeight直到viewDidAppear,但是经常(大约三次),drawableHeight和drawableWidth都是0. view.frame正确显示。
view.drawableHeight
(NSInteger) $3 = 0
view.drawableWidth
(NSInteger) $4 = 0
And this is the stack.
[RootViewController viewDidAppear:]
[UIViewController _setViewAppearState:isAnimating:]
[UINavigationController: viewDidAppear:]
(CGRect) [ view frame ]
(CGRect) $2 = origin=(x=0, y=64) size=(width=768, height=960)
self.view.layer.frame
(CGRect) $14 = origin=(x=0, y=64) size=(width=768, height=960)
(CGRect) [((UIWindow *)[self.view window ]) frame]
(CGRect) $15 = origin=(x=0, y=0) size=(width=768, height=1024)
窗框较高,因为它包含导航栏的高度。
似乎我可以使用self.view.layer.frame,它应该给我通常我希望drawableHeight和drawableWidth携带的尺寸。但我想知道为什么这种行为不一致,如果它可能表明其他问题。我们在viewDidAppear,因此可以期望分配帧缓冲区并设置drawableHeight和Width以反映帧缓冲区大小。
在xcode模拟器和ipad mini上都会发生这种情况。
答案 0 :(得分:1)
首先,不要相信任何与GL / GPU相关的模拟器。 (可能是基本原型GL代码。但是对于您希望发布的内容的详细信息,请务必检查设备。)
可绘制的宽度和高度是指视图管理的GL帧缓冲区的大小。 iOS上的优秀绘图代码并不会分配GPU资源,直到他们知道需要...特别是在GL中,因为你试图用GL做的许多事情实际上都会发生,直到你打个电话。大概GLKView
在它需要绑定它之前不会创建它的帧缓冲区,直到它调用你的drawRect:
/ glkView:drawInRect:
实现之前不久,它才需要发生。第一次。