【发布时间】:2017-04-27 17:09:39
【问题描述】:
这种方法有什么问题?问题是旋转后的图像在旋转后有透明框。我怎样才能摆脱它?
@implementation UIImage (RotationMethods)
static CGFloat getRadianFromDegree(CGFloat degrees)
{return degrees * M_PI / 180;};
- (UIImage *) rotateImageByDegree:(CGFloat)degrees
{
UIView *rotatedImageView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.width, self.size.height)];
CGAffineTransform t = CGAffineTransformMakeRotation(getRadianFromDegree(degrees));
rotatedImageView.transform = t;
CGSize rotatedSize = rotatedImageView.frame.size;
UIGraphicsBeginImageContextWithOptions(rotatedSize, YES, self.scale);
CGContextRef bitmap = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
CGContextRotateCTM(bitmap, getRadianFromDegree(degrees));
CGContextScaleCTM(bitmap, 1.0, -1.0);
CGContextDrawImage(bitmap, CGRectMake(-self.size.width / 2, -self.size.height / 2, self.size.width, self.size.height), [self CGImage]);
UIImage *rotatedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return rotatedImage;
}
@end
EDIT2 这是旋转动作的代码:
- (IBAction)rotateAction:(id)sender {
self.imageView.image = [self.imageView.image rotateImageByDegree:22];
}
【问题讨论】:
-
我猜问题出在 imageView 的 contentMode - 旋转后的图像不再适合 imageView,所以它被缩小了。
-
@matt
UIGraphicsBeginImageContextWithOptions(rotatedSize, NO, self.scale);我已更改,但没有结果还编辑了问题并添加了说明问题的图像 -
@Mr.Hedgehog 我刚刚编辑了问题
-
@matt 我已将其更改为“是”并上传了另一张图片希望它能显示我的问题
-
确保
UIImageView的backgroundColor设置为[UIColor clearColor]。
标签: ios objective-c uiimageview uiimage