私のiOSは、NSNotificationCenter
でデバイスオリエンテーションの変更通知を登録しており、異なるオリエンテーションの変更に対応する方法があります。次のコードは、電話機を「横置き」に回転させたときに、ビューの向きと位置を変更するために呼び出されます。CGAffineRotation Skews Image Photos
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)
ビューが正しく回転して、画面上の正しい位置を占めるが、画像の両側が急に押しつぶされ、画像が凝縮見せます。これは、携帯電話を横向きの位置(左または右)に回転させる場合にのみ発生します。逆さまにまたは逆に回転すると、基本的に同じコードで、ビューを平行移動して回転させます。風景の位置で画像の歪みを引き起こす原因は何ですか?
この画像にautoResizingMasksが設定されていますか? – CodaFi
いいえ、そうではありません。 –
もっと重要なのは、回転されているビューの 'contentMode'は何ですか?あなたの問題の一部を説明しているのは 'UIViewContentModeScaleToFill'です。 – warrenm