CGAffineRotation歪斜图像照片

时间:2012-04-30 02:06:08

标签: iphone objective-c ios uideviceorientation avcapture

我的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)

视图正确旋转并在屏幕上显示正确的位置,但图像的两侧突然被压扁,使图像看起来浓缩。仅当将手机旋转到横向位置(左或右)时才会发生这种情况。旋转到倒置或回到纵向转换和旋转视图很好,基本上相同的代码。什么可能导致图像在横向位置偏斜?

1 个答案:

答案 0 :(得分:2)

在对其设置旋转变换后,不应设置frame的{​​{1}}。要在设置旋转后重新定位_cameraToggleButton,您应该更改_cameraToggleButton,如下所示:

center

此外,正如其他人建议的那样,使用_cameraToggleButton.center = CGPointMake(274, 350); 代替UIViewContentModeScaleAspectFit