ビューをそれ自体の中心の周りで回転させることは可能ですか?
私の現在の実装では、サブビュー(ボタンなど)は、(スーパービューの座標系が回転しているため)目的の位置に到達する前に、面白いパスに沿って移動しているように見えます。下の写真のように、ビューを自分の中心の周りで90度回転させたいと思います。
私はこの質問が本当に好きです。また、一部のインターフェイスでは回転アニメーションが不快に感じます。これが私があなたが描いたものをどのように実装するかです。単純な@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
に変換を適用するだけです。
注:ボタン以外のタッチに関する限りデバイスを回転させても、デバイスは縦向きのままですが、私のコメントに対するあなたの応答は、それはあなたにとって問題ではないことを示しているようです。 。
関連する質問がある場合は、コメントを残してください。
Transformプロパティを使用して、UIViewサブクラスを手動で回転させることができます。
#import <QuartzCore/QuartzCore.h>
myView.transform = CGAffineTransformMakeRotation(M_PI/2);