我已将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上均会发生。

最佳答案

首先,对于任何与GL / GPU相关的东西,请不要相信模拟器。 (也许是基本的GL代码原型。但是,对于您希望发货的某些细节,请始终检查设备。)

可绘制的宽度和高度是指视图管理的GL帧缓冲区的大小。而且在iOS上好的绘图代码不会分配GPU资源,除非已知它们是必需的...尤其是在GL中,因为您尝试使用GL进行的许多操作实际上不会发生,除非您进行绘图调用。大概GLKView直到需要绑定它时才创建它的帧缓冲区,直到第一次调用drawRect: / glkView:drawInRect:实现之前不久,才需要创建它。

关于ios - 为什么未在viewDidAppear中设置GLKView的drawableWidth和drawableHeight?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27494921/

10-09 16:05