我无法在另一张图片上绘制旋转后的图片。我尝试了几种方法来做到这一点,但没有成功。我的 backgroundImg 没问题,但我的 logoImageView 没有旋转。为什么?这是我的代码:
CGSize newSize = CGSizeMake(555, 685);
//UIGraphicsBeginImageContext(newSize);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[backgroundImg.image drawInRect:CGRectMake(0, 0, 555, 685)];
CGAffineTransform rotate;
rotate = CGAffineTransformMakeRotation((rotationSlider.value + 360) * M_PI / 180.0);
logoImageView.layer.anchorPoint = CGPointMake (0.5, 0.5);
logoImageView.transform = CGAffineTransformMakeScale (1, -1);
[logoImageView setTransform:rotate];
然后我尝试 1):
[logoImageView.image drawAtPoint:CGPointMake(logoImageView.center.x, logoImageView.center.y)];
和 2):
[logoImageView.image drawInRect:CGRectMake(0, 0, logoImageView.bounds.size.width * 2.20, logoImageView.bounds.size.height * 2.20) blendMode:kCGBlendModeNormal alpha:1];
像这样完成绘图:
imageTwo = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
均无效 - 我的 logoImageView 未旋转。有什么问题?我希望我的 logoImageView.image 在组合图像中旋转。
最佳答案
您在这里所做的是设置 logoImageView
的 transform
属性。此属性指定应用于 UIImageView
本身的转换。虽然这会使图像在显示 ImageView 时旋转,但不会更改底层图像。
因此,当您旋转 ImageView 并读取 ImageView 的 image
属性时,您仍然会得到与分配给它的完全相同的图像,因为变换应用于 View 而不是图像本身。
您要做的是通过旋转变换将图像绘制到 CGContext
。要设置此转换,您必须使用 CGContextRotateCTM
函数。此函数设置“当前转换矩阵”,它指定在上下文中绘制时要应用的转换。我还使用 CGContextTranslateCTM
将图像移动到上下文的中心。
最终代码可能是这样的:
CGSize newSize = [flowersImage size];
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[flowersImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), newSize.width / 2.f, newSize.height / 2.f);
CGContextRotateCTM(UIGraphicsGetCurrentContext(), -M_PI/6.f);
[appleImage drawAtPoint:CGPointMake(0.f - [appleImage size].width / 2.f, 0.f - [appleImage size].height / 2.f)];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
关于ios - 无法绘制旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18765375/