Вопрос по uiview, ios – Могу ли я повернуть UIView без черных полос?

3

У меня есть UIView, который занимает все окно на iphone. Когда он поворачивается в ландшафт, края получают маленькие черные полосы, пока он не встанет на место, как я и ожидал.

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

Кто-нибудь сделал это успешно?

Ваш Ответ

4   ответа
0

которое требует, чтобы экран вращался с меньшей скоростью, чем стандартная скорость. Чтобы остановить черный прямоугольник вращения, ограничивающий вид (со стандартной скоростью вращения) до того, как началось мое собственное вращение, я просто установил флажок рядом сGeneral -> Deployment Info -> Requires Full Screen.

enter image description here

У меня также есть строка состояния, скрытая на контроллере представления, хотя окно скрытия строки состояния не отмечено.

3

Во-первых, контроллер корневого представления окна всегда изменяет размер своего представления до размера окна. Таким образом, ваше общее представление должно быть подчиненным представлению контроллера корневого представления (чтобы не допустить его уменьшения), и представление вашего корневого контроллера должно иметьclipsToBounds установить на NO. На самом деле все предки большого взгляда должны иметьclipsToBounds установить на NO.

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

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    UIWindow *window = self.view.window;
    [window bringSubviewToFront:window.rootViewController.view];
}
2

который работает, когда у вас два UIWindows перекрываются. (Это может иметь место, если вы хотите, чтобы в фоновом режиме не вращалось содержимое с вращающимся интерфейсом, плавающим сверху.) Идея состоит в том, чтобы непосредственно искать подпредставления черной полосы в самом переднем UIWindow при вызове willAnimateRotationToInterfaceOrientation и явно скрывать их , Следующий код ищет два уровня вглубь:

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
    UIWindow* window = self.view.window;
    for (UIView* view in [window subviews]) {
        if (!CGRectIntersectsRect(window.bounds, view.frame)) {
            view.hidden = YES;
        }

        for (UIView* view_ in [view subviews]) {
            CGRect frame = [view_ convertRect:view_.frame toView:window];
            if (!CGRectIntersectsRect(window.bounds, frame)) {
                view_.hidden = YES;
            }
        }
    }
}
Error: User Rate Limit Exceeded
0

вления (UINavigationController: UINavigationTransitionView; UITabBarController: UITransitionView и UIViewControllerWrapperView), для которых layer.masksToBounds по умолчанию имеют значение YES. Чтобы устранить черные края во время вращения, вы должны установить для этих и всех других иерархических представлений layer.masksToBounds значение NO.

Однако я не уверен, каков эффект изменения вышеупомянутых системных представлений ». Слои есть, поэтому я рекомендую сбросить их layer.masksToBounds обратно в YES, как только вы закончите анимацию.

Похожие вопросы