1

私の 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)

ビューは正しく回転し、画面上の正しい位置を想定しますが、画像の側面が突然押しつぶされ、画像が凝縮されたように見えます。これは、電話を横向き (左または右) に回転させた場合にのみ発生します。逆さまに回転したり、縦向きに戻したりすると、本質的に同じコードで、ビューがうまく変換および回転されます。横長の位置で画像が歪む原因は何ですか?

4

1 に答える 1

2

回転変換を設定しframeた後に の を設定しないでください。_cameraToggleButton回転を設定した後に _cameraToggleButton を再配置するには、次のcenterように変更する必要があります。

_cameraToggleButton.center = CGPointMake(274, 350);

また、他の誰かが示唆したように、UIViewContentModeScaleAspectFitの代わりに使用してUIViewContentModeScaleToFillください。

于 2012-04-30T02:47:45.593 に答える