私の iOS は を介してデバイスの向きの変更通知を登録してNSNotificationCenter
おり、さまざまな向きの変更に応答するメソッドがあります。次のコードは、電話を「横向き - 左」に回転させたときにビューの方向と位置を変更するために呼び出されます。
camAngle = [(NSNumber *)[_cameraToggleButton valueForKeyPath:@"layer.transform.rotation.z"] floatValue];
camDegrees = (RADIANS_TO_DEGREES(camAngle));
if (!(camDegrees == 90)) {
_cameraToggleButton.alpha = 0.0;
_cameraToggleButton.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(90));
_cameraToggleButton.frame = CGRectMake(274, 350, 66, 54);
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.4];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
_cameraToggleButton.alpha = 1.0;
[UIView commitAnimations];
}
そして、ラジアンと度を変換するための私の方程式:
#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI))
#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)
ビューは正しく回転し、画面上の正しい位置を想定しますが、画像の側面が突然押しつぶされ、画像が凝縮されたように見えます。これは、電話を横向き (左または右) に回転させた場合にのみ発生します。逆さまに回転したり、縦向きに戻したりすると、本質的に同じコードで、ビューがうまく変換および回転されます。横長の位置で画像が歪む原因は何ですか?