Авторация в галерее - willAnimateRotation ... не вызывается - PullRequest
2 голосов
/ 25 октября 2010

Я использую это .

Я поместил это туда, где добавляются изображения:

self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Я поместил эти переопределения в SlideShowViewController:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return YES;
}

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)InterfaceOrientation duration:(NSTimeInterval)duration {


}

Первый называется, но не второй.

Я не использую перо;он использует собственный init, который возвращает self.view с 3 изображениями на нем.

Я что-то упустил?Как лучше всего изменить этот сценарий, чтобы растягивать фотографии ландшафта до полной ширины при повороте iPhone пользователем?

Редактировать: только что попытался добавить willAnimate ... вRoot View Controller моего NavigationController, но он не вызывается.Возможно, NavigationController является проблемой?В таком случае, куда мне положить willAnimate ...?В качестве альтернативы, как я могу получать и передавать сообщения, отправленные ему в направлении видимого viewController?

Редактировать 2: причиной ошибки в теме было то, что TabBarController пропустил соединениев IB (который я был уверен, был там).Так что теперь моя проблема такая же, как и для нескольких других подобных вопросов - willAnimate ... вызывается в корневом VC, но не в помещенных VC.Код, который я использовал, исчезает в галерее VC, а не вставляет его, т.е.он не выдвигается, но в настоящее время добавляется в качестве подпредставления в окно - для заполнения всего экрана.

Предложения по отправке сообщения контроллеру этого подпредставления для установки кадров, или альтернативные решения!

Ответы [ 4 ]

1 голос
/ 11 ноября 2010

Это не ответ на вопрос, почему ваш метод willAnimateRotation .. не вызывает, а вместо этого альтернатива тому, как галерея изображений может адаптироваться к самому повороту.

В initWithImages добавить:

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

Добавьте этот метод для получения уведомления. В didRotate вы можете обрабатывать изменение размера изображения.

- (void) didRotate:(NSNotification *)notification
{   
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

    if (orientation == UIDeviceOrientationLandscapeLeft)
    {
        NSLog(@"Landscape Left!");
    }
}

Не забудьте отменить регистрацию уведомления в dealloc:

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];

Могу ли я также предложить вам использовать UIScrollView вместо самостоятельной обработки прокрутки и жестов?

0 голосов
/ 08 декабря 2010

Думаю, на этот вопрос было немного сложно ответить, так как он касался моей конкретной не элементарной настройки приложения.Извините за то, что время щедрости истекло, в тот же день, когда я спросил, было в основном слишком поздно;)

Я думал, что опубликую это сообщение «не похоронено в комментариях» для тех, у кого наблюдаются такие же симптомы.*

Первым было то, что я заметил IBOutlet, который, я уверен, что я подключился в одной точке, больше не был подключен (контроллер панели вкладок -> объект tabBarController).Поскольку я ломал голову и перемещал вещи, чтобы сделать эту работу, это, вероятно, было связано с тем, что я что-то пробовал, а затем восстанавливал резервную копию.

Вторая часть решения заключалась в добавлении SubView представления галереи в представление tabBarControllerвместо навигации - для просмотра.Затем были вызваны корневые методы контроллера mustAuto ... и willAuto.

(Чтобы скрыть панель вкладок и панель навигации во время поворота, мне пришлось установить их .alpha в 0, пока отображается галерея, в противном случае перемещался-в вид был частично скрыт под панелью навигации при возврате к ней. Я не нашел способа скрыть строку состояния при отображении галереи.)

После этого был запрос о детализации галереи-view перешел на другую вкладку, и я получил хитрую ошибку, заключающуюся в том, что только когда ДРУГОЙ (рабочий) подробный вид, показанный на другой вкладке, будет автоматически работать с новой галереей.Вернемся к решению этой проблемы, время бросить курить.

0 голосов
/ 11 ноября 2010

У меня была похожая проблема при получении viewWillAppear и аналогичного метода, вызванного в контроллере навигации.
Я решил, вызвав их вручную при вызове корневого метода.
Я не знаю, та же ли проблема с ротацией, но вы можете попробовать вставить свой корневой контроллер

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)InterfaceOrientation duration:(NSTimeInterval)duration {
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    [self.navigatioController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
0 голосов
/ 05 ноября 2010

Вставлен ли SlideShowViewController непосредственно в стек контроллера навигации или он является частью какого-либо другого представления? Методы делегата UIView путаются при работе с подпредставлениями в представлениях в стеке контроллера навигации.

Если SlideShowViewController - это просто подпредставление какого-либо другого представления, помещенного в стек контроллера навигации, я попытался бы прослушать этот метод в контроллере представления, который фактически находится в стеке контроллера навигации, а затем вызвать соответствующий метод в Оттуда SlideShowViewController.

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