вопрос о ротации, когда задействованы несколько видов - PullRequest
1 голос
/ 01 марта 2011

Я относительный новичок в какао и программировании для iPad.

Я создал приложение с контроллером разделенного вида. В подробном представлении находится панель инструментов с кнопкой на ней. Когда кнопка нажата, контроллер разделенного представления удаляется из суперпредставления, и на его место ставится другой вид. Кнопка на панели инструментов в этом новом представлении удаляет представление и возвращает разделенное представление обратно. Прекрасно работает ... за исключением случаев, когда Ipad поворачивается, когда виден второй вид. Когда пользователь возвращается в разделенное представление, оно отображается так, как оно было до поворота.

Разделенное представление и все вложенные представления устанавливаются в autoresize = yes и возвращают yes, когда получают сообщение autorotatetointerfaceorientation.

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

Спасибо Chris

Ответы [ 2 ]

0 голосов
/ 01 марта 2011

Пожалуйста, смотрите мой вопрос по этому вопросу здесь:

Лучший способ переключения между UISplitViewController и другими контроллерами представления?

Если вы используете UISplitViewController в соответствии с намерениями Apple, он весьма ограничен.

Я закончил тем, что использовал стратегию, точно такую, как вы упомянули - то есть удалите представление UISplitViewController из UIWindow, замените его другим, а затем переключитесь обратно. Я обнаружил, что изменение ориентации БЫЛО обработано, даже если я повернулся во время представления вида B (B - вид без разделения), а затем переключился обратно на A (вид разделения). Однако, чтобы заставить его работать, мне пришлось немного поиграться с размером фрейма в uisplitview. Обновлюсь с дополнительной информацией позже, когда я найду это.

Существует также возможность написания вашего собственного контроллера разделенного представления или использования переопределения кого-то другого, такого как этот:

http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad

UPDATE

Трек, который я сделал с размером кадра UISplitView, можно увидеть в следующем методе в моем AppDelegate. Эти методы предназначены для представления контроллера разделенного представления путем замены другого контроллера представления верхнего уровня в UIWindow:

- (void)removeAllWindowSubviews {
    for (UIView *childView in window.subviews) {
        [childView removeFromSuperview];
    }
}

- (void)presentSplitView:(UISplitViewController *)vc {
    [self removeAllWindowSubviews];

    UIView *viewForSplitVC = vc.view;

    // fix for deficiency in adding a split view controller's view in landscape mode
    // and it still having a frame for portrait mode.
    // 2010-10-15 added -20.0f to fix problem with toolbar in LHS VC being 20 pix too low. 
    viewForSplitVC.frame = CGRectMake(viewForSplitVC.frame.origin.x, viewForSplitVC.frame.origin.y, 
                              navigationController.view.bounds.size.width, navigationController.view.bounds.size.height - 20.0f);    

    [window addSubview:viewForSplitVC];
}

// for removing the split view and restoring the other main VC
- (void)restoreMenu {
    if (isIPad()) {
        [self removeAllWindowSubviews];

        [window addSubview:navigationController.view];      
    }
}

Как я уже сказал, это взлом, но исправление фрейма дало мне возможность представить разделенный VC без порочного фрейма. И, как я уже отмечал ранее, выполняя эту работу, мы выходим за пределы того, что Apple хочет, чтобы мы делали, и, следовательно, замешаны в этом.

0 голосов
/ 01 марта 2011

Хорошо, у меня есть идея, что может работать: не удаляйте представление UISplitViewController из иерархии представлений.Вместо этого либо поместите представление поверх него, установите для свойства alpha его представления значение 0 или установите для свойства hidden его представления значение YES.

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