Вращение / перемещение объектов в UIView - PullRequest
0 голосов
/ 27 октября 2010

Мне нужно вращать и перемещать объекты на UIView, когда ориентация меняется. Для этого у меня есть следующее в willRotateToInterfaceOrientation

if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
    [self repositionObjectAfterRotation:scrollView x:0 y:100 width:480 height:150];
    [self repositionObjectAfterRotation:pageControl x:50 y:430 width:100 height:30];    
}

Мой repositionObjectAfterRotation:x:y:width:height: выглядит следующим образом: он берет объект и изменяет его границы перед установкой новых границ.

- (void)repositionObjectAfterRotation:(UIView *)anObject x:(int)x y:(int)y 
                                     width:(int)width height:(int)height
{   

    [UIView animateWithDuration:kAnimationDuration animations:^{
        CGRect boundsRect = anObject.bounds;
        boundsRect.origin.x = x;
        boundsRect.origin.y = y;
        boundsRect.size.width = width;
        boundsRect.size.height = height;
        anObject.bounds = boundsRect;
    } completion:^ (BOOL finished){
        if (finished) {
            [UIView animateWithDuration:kAnimationDuration animations:^{
                anObject.alpha = 1.0;
            }];
        }
    }];

}

Когда вид поворачивается обратно в портрет, он отображает только половину вида прокрутки, хотя мои NSLogs утверждают, что рамки и границы правильные ...

Правильно ли я вращаю / перемещаю объекты или есть более простой / предпочтительный способ поддержки ландшафта?

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 октября 2010

3 балла:

  1. вам не нужно явно начинать анимацию, система все равно сделает это (если ваша анимация не «отличается от вращения»).
  2. Я думаю, что переопределение layoutSubviews более удобно. Он вызывается после каждого поворота, и [device orientation] дает вам новую ориентацию.
  3. Возможно, вы захотите изменить frame этих представлений, а не их bounds, что является внутренним значением (т. Е. Оно имеет значение только "внутри" этого представления).

frame говорит: «Поставь меня в положение сверхъестественного», чего ты и хочешь. bound определяет координаты вашего, скажем, scrollView для его подпредставлений. здесь вам нужна рамка.

В layoutSubviews, просто измените кадр, анимация, которую вы хотите, будет применена автоматически:

- (void)layoutSubviews {
    if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation])) {
        anObject.frame = landscapeFrame;
    }
    else {
        anObject.frame = portraitFrame;
    }
}
0 голосов
/ 27 октября 2010

Вы явно устанавливаете высоту на «150» при повороте на альбомную, но не настраиваете ее обратно, когда возвращаетесь к портретной ориентации.

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

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