2012-02-19 3 views
2

Редактирование, чтобы спросить, помогает ли Autolayout в этой ситуации?Вращающийся UILabel с фиксированным положением

Как я могу использовать UILabel в неподвижном положении на экране, но все же вращаться? shouldAutorotateToInterfaceOrientation возвращает ДА, и метка вращается просто отлично, но независимо от того, как я устанавливаю стойки пружин в 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.

+0

Post картины того, что он делает и то, что вы хотите, чтобы это сделать. –

+0

уверен, что вам придется делать это вручную (вращение). Вы не можете использовать стойки/пружины, чтобы получить необходимый эффект. – gamozzii

ответ

3

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

Вы должны выложить свои мнения в willAnimateRotationToInterfaceOrientation:duration:. Как the documentation состояний:

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

Вы могли бы даже одушевленные Ваше отношение к их новой позиции в этом методе.

1

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

2

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

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

1

Создайте два 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 
     } 
     .... 
}