2012-04-30 6 views
1

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

ビューが正しく回転して、画面上の正しい位置を占めるが、画像の両側が急に押しつぶされ、画像が凝縮見せます。これは、携帯電話を横向きの位置(左または右)に回転させる場合にのみ発生します。逆さまにまたは逆に回転すると、基本的に同じコードで、ビューを平行移動して回転させます。風景の位置で画像の歪みを引き起こす原因は何ですか?

+0

この画像にautoResizingMasksが設定されていますか? – CodaFi

+0

いいえ、そうではありません。 –

+0

もっと重要なのは、回転されているビューの 'contentMode'は何ですか?あなたの問題の一部を説明しているのは 'UIViewContentModeScaleToFill'です。 – warrenm

答えて

2

回転変換を設定した後で_cameraToggleButtonframeを設定しないでください。あなたがローテーションを設定した後_cameraToggleButtonを再配置するには、あなたはそれがそうのようなcenterです変更する必要があります。他の誰かが提案されているよう

_cameraToggleButton.center = CGPointMake(274, 350); 

また、UIViewContentModeScaleAspectFit代わりのUIViewContentModeScaleToFillを使用しています。

+0

ありがとう、男! –

関連する問題