我无法将旋转的图像绘制在另一个图像的顶部。我尝试了几种方法来做到这一点,但没有成功。我的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在组合图像中旋转。
答案 0 :(得分:3)
您在此处所做的是设置transform
- logoImageView
的属性。此属性指定应用于UIImageView
本身的转换。虽然这会使图像在显示图像视图时显示为旋转,但它不会更改基础图像
因此,当您旋转图像视图并读取图像视图的image
- 属性时,您仍会获得与分配给它的图像完全相同的图像,因为变换应用于视图而不是图像本身。 / p>
您要做的是使用旋转变换将图像绘制到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();