Вращающийся UILabel с фиксированным положением - PullRequest
2 голосов
/ 19 февраля 2012

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

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

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

This is how I've created the layout in storyboard, with four individual UILabels. This is how landscape appears -- not what I want. Here is what I would like landscape to look, with the rotation animation of each number centered on the number itself.

Ответы [ 4 ]

3 голосов
/ 19 февраля 2012

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

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

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

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

2 голосов
/ 19 февраля 2012

Вы можете выполнить вращение над этикетками (трансформатин).сделать это с помощью метода didrotate из interfaceorientation в контроллере uiview.

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

1 голос
/ 19 февраля 2012

Создайте две метки UILabel, одну по горизонтали, а другую по вертикали. Скрыть и показать нужную метку при изменении ориентации. Для этого вы должны поместить в 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
       }
       ....
}
1 голос
/ 19 февраля 2012

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

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