Вращение Uilabel с фиксированным положением
-
27-10-2019 - |
Вопрос
Редактирование, чтобы спросить, помогает ли Autolayout в этой ситуации?
Как я могу заставить мою Uilabel сохранить фиксированное положение на экране, но все же вращается? Должена оуторотатетоинтерфейс -аоооотасия возвращается «да», и этикетка вращается просто хорошо, но независимо от того, как я устанавливаю стойки пружины в xcode. Положение метки меняется.
Первое изображение показывает, как я создал макет в раскадровке с четырьмя отдельными Uilabels. Второе изображение показывает, как появляется пейзаж, а не то, что я хочу. Третье изображение показывает, как я бы хотел, чтобы ландшафт выглядел, с анимацией вращения каждого числа, сосредоточенной на самом номере.
Решение
VRK на правильном пути со своим ответом, но shouldAutorotateToInterfaceOrientation:
не правильный метод, в котором можно разместить эти этикетки. Когда вы получаете shouldAutorotateToInterfaceOrientation:
, пока ничего не было обновлено для новой ориентации.
Вы должны изложить свои взгляды в willAnimateRotationToInterfaceOrientation:duration:
. Анкет В качестве документация состояния:
К тому времени, когда этот метод называется,
interfaceOrientation
Свойство уже установлено на новую ориентацию, и границы представления были изменены. Таким образом, вы можете выполнить любой дополнительный макет, требуемый вашим представлением в этом методе.
Вы могли бы даже оживить ваши взгляды на свои новые позиции в этом методе.
Другие советы
Вы можете выполнить вращение на этикетках (преобразование). Сделайте это на методе интерфейс -ориентации DidRotate от Uiviewcontroller.
uilabel.transform = cgaffinetransformmakerotation (m_pi / -4); как это. Выполните это на всех четырех ориентации. И одна вещь берет ориентацию Statusbar от AppDelegate, кроме ориентации устройства. Это поможет вам сохранить синхронизацию с ориентацией на просмотр.
Вам необходимо установить значения позиции кадра метки вручную в методе shopautorotateTeclainfaceorientation
Создайте два Uilabels, один горизонтально и другой вертикально. Скрыть и показать необходимую метку при изменении ориентации. Для этого вы должны поместить в ViewDiddload:
[[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
}
....
}