Я задерживаю доступ к view.drawableHeight до viewDidAppear, но всегда так часто (примерно один раз в 3 раза) drawableHeight и drawableWidth равны 0. Рамка view.frame отображается правильно.Почему GLKView's drawableWidth и drawableHeight не установлены в viewDidAppear?
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.
Спасибо, что может это полностью объяснить! Хорошее объяснение. Я смог стабилизировать мой init, используя layer.frame.size в viewDidAppear, который не полагается на создаваемый фреймбуфер. Я должен задержать мой init до первого обновления. Я посмотрю, нужен ли мне фреймбуфер для моего оставшегося элемента init. – nishant