Как повернуть только один элемент в UIView

#iphone #objective-c

#iPhone #objective-c

Вопрос:

У меня есть UIView, который содержит много элементов, таких как UIScrollView.

Как я могу указать, что я хочу повернуть только один UIScrollView при изменении положения моего устройства (или симулятора iPhone)?

Спасибо!

Ответ №1:

  • возвращает NO из

 - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
  
  • обработайте уведомление о повороте устройства самостоятельно:

     [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(didRotate:)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:nil];
  
  • и повернуть только тот вид, который вы хотите:

 self.theView.transform = CGAffineTransformIdentity;
self.theView.transform = CGAffineTransformMakeRotation(degreesToRadians(-90));
  

Комментарии:

1. Я попытался использовать CGAffineTransformMakeRotation(), и это работает нормально. Я не уверен, что понял, как самостоятельно обрабатывать уведомление о повороте, но, полагаю, использование этого метода не позволит мне сохранять эффекты поворота для моего элемента?

2. Поскольку вы хотите повернуть только одну вещь, вам нужно сообщить «системе», что ваш контроллер просмотра не вращается, иначе вы заставите вращаться все элементы, для этого и нужен возврат «НЕТ». Но тогда, как вы узнаете, когда устройство вращается? Для этого и предназначена обработка уведомления, оно сообщает вам, когда нужно повернуть.

3. Хорошо, я это понял. Но когда я должен вызвать уведомление? Когда устройства вращаются, правильно. Но как мне определить вращение устройства? Спасибо.

4. Нет, вы получаете уведомление при повороте устройства. Как вы ожидаете узнать, когда устройство вращается самостоятельно? 🙂

Ответ №2:

 UIView *localView = [mainView viewWithTag:tagOfScrollViewToRotate];   
 UIInterfaceOrientation deviceOrientation = [UIApplicationsharedApplication].statusBarOrientation;

            float   angle;
            switch (deviceOrientation) {
                case UIInterfaceOrientationPortraitUpsideDown:
                {   
                    angle = M_PI;
                    CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
                    [localView setTransform:transform];

                    break;
                }
                case UIInterfaceOrientationLandscapeLeft:
                {
                    angle = -M_PI/2;
                    CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
                    [localView setTransform:transform];
                    localView.frame = CGRectMake(0, 0, 768, 1024);

                    break;
                }
                case UIInterfaceOrientationLandscapeRight:
                {
                    angle = M_PI/2;
                    CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
                    [localView setTransform:transform];
                    localView.frame = CGRectMake(0, 0, 768, 1024);
                    break;
                }

                default:
                {
                    angle = 0;
                    break;
                }
            }
  

Удачи, 😀