2012-04-30 65 views
1

我的iOS已通过NSNotificationCenter注册设备方向更改通知,并且具有响应不同方向更改的方法。调用以下代码可以在将手机旋转到“横向左侧”时更改视图的方向和位置。CGAffineRotation倾斜图像照片

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

非常感谢,男士! –