J'aime vraiment cette question. Je trouve aussi que la rotation de l'animation choquante pour certaines interfaces. Voici comment je voudrais mettre en œuvre ce que vous avez photographié. Un simple @interface
sera très bien.
Note: je suis à l'aide de l'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
La prise appropriée, les connexions sont faites pour les boutons dans l' .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
Et c'est tout. Maintenant, lorsque vous faites pivoter votre appareil, l'écran ne tourne pas, mais les boutons comme indiqué:
Bien sûr, si vous voulez que le bouton d'étiquettes pour vous serait tout simplement d'appliquer la transformation à l' _buttonA.titleLabel
à la place.
Remarque: Veuillez noter qu'une fois que l'appareil est tourné en ce qui concerne les touche pas sur les boutons, l'appareil est toujours en mode portrait, mais votre réponse à mon commentaire semble indiquer qu'il n'est pas un problème pour vous.
N'hésitez pas à laisser un commentaire si vous avez une question connexe.