我正在设计一个界面,用户可以使用手势缩放和旋转图像,然后在完成后将图像与背景图像合并。我在将旋转图像与背景合并时遇到问题。
- (void) donePlacingPicture
{
UIImage * scaledTopImg = [self.photoImage.image imageByScalingProportionallyToSize:self.photoImage.frame.size];
UIGraphicsBeginImageContext(scaledTopImg.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(ctx, scaledTopImg.size.width * 0.5f, scaledTopImg.size.height * 0.5f);
CGFloat angle = atan2(self.photoImage.transform.b, self.photoImage.transform.a);
CGContextRotateCTM(ctx, angle);
[scaledTopImg drawInRect:CGRectMake(- scaledTopImg.size.width * 0.5f, -(scaledTopImg.size.height * 0.5f), scaledTopImg.size.width, scaledTopImg.size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContext(self.MainImage.image.size);
[self.MainImage.image drawInRect:CGRectMake(0, 0, self.MainImage.image.size.width, self.MainImage.image.size.height)];
[newImage drawInRect:CGRectMake(self.photoImage.frame.origin.x, self.photoImage.frame.origin.y, newImage.size.width, newImage.size.height)];
self.MainImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.photoImage.hidden = TRUE;
self.photoImage = nil;
}
这给了我以下错误
CGContextSaveGState: invalid context 0x0
CGContextSetBlendMode: invalid context 0x0
CGContextSetAlpha: invalid context 0x0
CGContextTranslateCTM: invalid context 0x0
CGContextScaleCTM: invalid context 0x0
CGContextDrawImage: invalid context 0x0
CGContextRestoreGState: invalid context 0x0
有时候这个功能会起作用,图像会以旋转的形式添加,但是比例会稍微偏离,角落会被裁剪掉,而其他时候也没有任何影响,我会得到这些错误。我相信错误来自
[newImage drawInRect:CGRectMake(self.photoImage.frame.origin.x, self.photoImage.frame.origin.y, newImage.size.width, newImage.size.height)];
导致图像上下文设置为nil,这会在
时抛出错误self.MainImage.image = UIGraphicsGetImageFromCurrentImageContext();
达到。当这些行中的任何一行被注释掉时,我都不会得到错误。
有没有人知道这些错误是什么意思,知道一个更好的方法来轮换一个视图,或者可以指向一个完成此操作的示例项目?
提前致谢,这是我第一篇关于stackoverflow的帖子。我意识到有很多类似于这个的问题,但没有一个问题在我的情况下非常有帮助。