Мне очень понравился этот вопрос. Я также нахожу чередующуюся анимацию вращения для некоторых интерфейсов. Вот как я мог бы реализовать то, что вы нарисовали. Простой @interface
будет в порядке. Примечание: Я использую ARC.
#import <UIKit/UIKit.h>
@interface ControllerWithRotatingButtons : UIViewController
@property (strong, nonatomic) IBOutlet UIButton *buttonA;
@property (strong, nonatomic) IBOutlet UIButton *buttonB;
@property (strong, nonatomic) IBOutlet UIButton *buttonC;
@end
Соответствующие соединения выходные сделаны кнопки в .xib
:

ControllerWithRotatingButtons.m:
#import "ControllerWithRotatingButtons.h"
@implementation ControllerWithRotatingButtons
@synthesize buttonA = _buttonA;
@synthesize buttonB = _buttonB;
@synthesize buttonC = _buttonC;
-(void)deviceRotated:(NSNotification *)note{
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
CGFloat rotationAngle = 0;
if (orientation == UIDeviceOrientationPortraitUpsideDown) rotationAngle = M_PI;
else if (orientation == UIDeviceOrientationLandscapeLeft) rotationAngle = M_PI_2;
else if (orientation == UIDeviceOrientationLandscapeRight) rotationAngle = -M_PI_2;
[UIView animateWithDuration:0.5 animations:^{
_buttonA.transform = CGAffineTransformMakeRotation(rotationAngle);
_buttonB.transform = CGAffineTransformMakeRotation(rotationAngle);
_buttonC.transform = CGAffineTransformMakeRotation(rotationAngle);
} completion:nil];
}
-(void)viewDidLoad{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceRotated:) name:UIDeviceOrientationDidChangeNotification object:nil];
}
-(void)viewDidUnload{
[super viewDidUnload];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
И это все. Теперь, когда вы поворачиваете устройство экран не будет вращаться, но кнопки будут, как показано:

Конечно, если вы хотите только этикетки на кнопку, чтобы включить вы просто применить преобразование к _buttonA.titleLabel
вместо.
Примечание: Пожалуйста, обратите внимание, что после того, как устройство вращается, насколько какие штрихи не на кнопках обеспокоены устройство еще в портретном, но ваш ответ на мой комментарий, кажется, указывает, что это не является проблемой для вас.
Не стесняйтесь оставлять комментарии, если у вас есть соответствующий вопрос.
+1 для хорошо иллюстрированного вопроса – Till
Вы хотите, чтобы строка состояния оставалась неподвижной, или это просто пропущено на иллюстрации? – NJones
@NJones Пока это не моя главная цель, было бы хорошо, если бы оно оставалось неподвижным! В моей нынешней реализации субвизоры движутся по «смешному пути», потому что супер-просмотр (или корневое окно?) Вращается. – ragnarius