Вращение UILabel с фиксированным положением

Редактирование, чтобы спросить, помогает ли Autolayout в этой ситуации?

Как я могу заставить свой UILabel сохранять фиксированное положение на экране, но при этом вращаться? shouldAutorotateToInterfaceOrientation возвращает YES, и метка нормально вращается, но независимо от того, как я устанавливаю стойки и пружины в Xcode, положение метки изменяется.

На первом изображении показано, как я создал макет в раскадровке с четырьмя отдельными UILabels. Второе изображение показывает, как выглядит пейзаж — не то, что я хочу. Третье изображение показывает, как я хотел бы, чтобы выглядел ландшафт, с анимацией вращения каждого числа, сосредоточенной на самом числе.

Вот как я создал макет в раскадровке с четырьмя отдельными UILabels.Вот как выглядит ландшафт - не то, что я хочу. Вот что я хотел бы видеть в альбомной ориентации, с анимацией вращения каждого числа, сосредоточенной на самом числе.


person Michael Mangold    schedule 19.02.2012    source источник
comment
Разместите фотографии того, что он делает и что вы хотите, чтобы он делал.   -  person rob mayoff    schedule 19.02.2012
comment
почти уверен, что вам придется делать это вручную (поворот). Вы не можете использовать стойки/пружины, чтобы получить желаемый эффект.   -  person gamozzii    schedule 19.02.2012


Ответы (4)


vrk на правильном пути со своим ответом, но shouldAutorotateToInterfaceOrientation: - неправильный метод для размещения ваших ярлыков. Когда вы получаете shouldAutorotateToInterfaceOrientation:, для новой ориентации еще ничего не было обновлено.

Вы должны изложить свои взгляды в willAnimateRotationToInterfaceOrientation:duration:. Как документация гласит:

К моменту вызова этого метода свойство interfaceOrientation уже имеет новую ориентацию, а границы представления были изменены. Таким образом, вы можете выполнить любой дополнительный макет, требуемый вашими представлениями в этом методе.

В этом методе вы даже можете анимировать свои представления на их новые позиции.

person rob mayoff    schedule 19.02.2012

вы можете выполнить вращение на этикетках (transformatin). сделайте это в методе didrotatefrom interfaceorientation в uiviewcontroller.

uilabel.transform = CGAffineTransformMakeRotation (M_PI / -4); так. выполните это на всех четырех ориентациях. и одна вещь берет ориентацию строки состояния от appdelegate, отличную от ориентации устройства. это поможет вам синхронизироваться с ориентацией вида.

person J S Rodrigues    schedule 19.02.2012

вам нужно установить значения положения кадра метки вручную в методе shouldAutorotateToInterfaceOrientation

person vrk    schedule 19.02.2012

Создайте две UILabels, одну по горизонтали и другую по вертикали. Скрыть и показать требуемую метку при изменении ориентации. Для этого нужно поставить в viewDidLoad:

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

и реализовать

- (void) didRotate:(NSNotification *)notification{

       UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

       if (orientation == UIDeviceOrientationLandscapeLeft)
       {

          // show Horizontal Label
       }
       ....
}
person rakeshNS    schedule 19.02.2012