UIViewController не работает. Методы не называются - PullRequest
4 голосов
/ 27 мая 2010

Привет,

Этот вопрос, кажется, является продолжающейся сагой в мире iphone SDK ... так вот мой вклад ...

Было два отдельных проекта из одного и того же шаблона ... один полуработа, другой совсем нет ... Пожалуйста, позвольте мне объяснить мои шаги ...

использовал этот базовый шаблон GL ES //iphonedevelopment.blogspot.com/2008/12/opengl-project-template-for-xcode.html пришлось разобраться с некоторыми настройками «Release», но в остальном есть все, что мне нужно, чтобы добавить ориентацию в проект GL ES.

Один мой первый проект, сделал мои вещи, затем добавил эти методы ....

-(BOOL)shouldAutoRotateToInterfaceOrientation .....   
-(void)willRotateToInterfaceOrientation ....
-(void)didRotateFromInterfaceOrientation ....
-(void)willAnimateRotationToInterfaceOrientation ....

И понять, что они делают (или пытаются сделать в моем случае), (BOOL) должен ... вызываться один раз при создании контроллера представления и возвращать "YES". Но после этого ни один из других методов не вызывается!

Итак, я начал с нуля с пустого шаблона (GL ES один сверху) ... и добавил минимум для поддержки автоматического поворота. Но на этот раз ни один из методов не вызывается!

Итак, я исследовал .... //developer.apple.com/iphone/library/qa/qa2010/qa1688.html как было сказано, я сначала добавил GLViewController.view, а затем добавил GLview в качестве подпредставлений делегата приложения. Ничего!

Тогда нашел это //www.iphonedevsdk.com/forum/iphone-sdk-development/44993-how-determine-ipad-launch-orientation.html какие состояния для включения уведомлений об ориентации

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

и затем впоследствии отключить их в контроллере вида ... имеет смысл ... сделал это, ничего ...

Я думаю, что уведомления могут быть включены по умолчанию, хотя, поскольку мне не нужно было включать их в первом проекте, все же он все еще пытается проверить ориентацию (т. Е. (BOOL) должен AutoRotate ...) ...

Если кто-нибудь сможет мне помочь, это будет очень признательно, так как эта проблема сводит меня с ума. Заранее спасибо.

Код можно найти здесь ... http://rapidshare.com/files/392053688/autoRotation.zip

N.B. В этих проектах избегаются ресурсы nib / xib, и мы хотели бы сохранить их, если это возможно.

P.S iPad устройство не там, где я нахожусь, поэтому я пока не могу проверить устройство. Было бы неплохо, чтобы он работал на симуляторе.

Ответы [ 2 ]

4 голосов
/ 27 мая 2010

Ладно ... итак, после того, как другая пара ударилась головой о стену, попробовала сделать это вручную ... аллилуйя ...

так вот результат ... добавьте эти две строки, чтобы они вызывались при создании контроллера представления ... то есть в - (void) loadView или эквивалентный

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selectot(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];

и set (void) должен .... вернуть YES

-(void)shouldRotateToInterfaceOrienation
{
return YES;
}

удалить все ..

-(void)willRotateToInterfaceOrientation ....
-(void)didRotateFromInterfaceOrientation ....
-(void)willAnimateRotationToInterfaceOrientation ....

это не нужно ...

, а затем добавьте метод didRotate

-(void)didRotate:(NSNotification*)notification
{
UIDeviceOrientation oreo = [[UIDevice currentDevice] orientation];
// oreo is our new orientation!
}

По сути, проблема заключалась в том, что я попытался заставить его работать наполовину с добавлением beginGeneratingDeviceOrientationNotifications. Мне также нужно было «захватить» события ориентации и обработать их самостоятельно ...

Для пуристов, которые хотят знать, почему? Я не знаю или не понимаю почему, извините ... теоретически это должно было сработать, но на практике это не сработало.

0 голосов
/ 23 ноября 2011

У меня было много проблем с didRoateToInterfaceOrienataion, который не всегда вызывали. shouldRotateToInterfaceOrientation всегда вызывался, но иногда безо всякой причины строка состояния поворачивалась бы в альбомную ориентацию, а контроллер представления - нет, а didRotateTo ... не вызывался Я попытался переопределить NavigationController для поддержки didRotateTo ... но я не хотел, чтобы все представления в NavigationController поддерживали вращение.

В итоге я определил, что представление ДО того, которое поддерживает вращение, также должно было поддерживать вращение. Вы могли бы подумать, что проблема возникнет только в этом предыдущем представлении, но каким-то образом проблема исчезла, и это было единственное изменение.

Также это http://developer.apple.com/library/ios/#qa/qa1688/_index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...