我遇到一个简单的iPad图像拼贴应用程序的问题。我有一个UIImageView,可以拖放不同的UIImageViews。拖动的视图可以旋转和拉伸。当用户完成图像编辑后,我将合并所有图像到最终图像上。我的解决方案是使用UIGraphics并绘制大图像,然后遍历所有子视图并在上下文中绘制它们:
- (UIImage*)mergeImages
{
CGSize imageSize = imageView.frame.size;
UIGraphicsBeginImageContext(imageSize);
[imageView.image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];
[[imageView subviews] enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {
UIImage *imageOriginal = ((UIImageView*)object).image;
CGRect rect = ((UIImageView*)object).frame;
UIImage *imageToAdd = [self scaleImage:imageOriginal :rect.size];
// Find the w/h ratioes
float widthRatio = rect.size.width / imageOriginal.size.width;
float heightRatio = rect.size.height / imageOriginal.size.height;
// Calculate point to draw at
CGPoint pointToDrawAt;
if (widthRatio > heightRatio)
pointToDrawAt = CGPointMake(rect.origin.x + (rect.size.width / 2) - (imageToAdd.size.width / 2), rect.origin.y);
else
pointToDrawAt = CGPointMake(rect.origin.x, rect.origin.y + (rect.size.width / 2) - (imageToAdd.size.height / 2));
[imageToAdd drawAtPoint:pointToDrawAt];
}];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Save image in photogalery
UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);
return newImage;
}
只要图像不旋转,上述操作就会产生罚款。所以我的问题是:
有没有办法可以从子视图中找到旋转角度,还是我必须将UIView子类化并使其成为属性?或者是否有另一种方法可以合并图像并获得绘图特定的属性,如角度和滤镜?
如果我可以提供更多代码或其他任何评论。并提前感谢:)
答案 0 :(得分:0)
UIImages有一个名为“imageOrientation”的属性,可以查询。一旦你知道了这一点,就可以将CGAffineTransform应用到上下文中,以便在你看到它时渲染图像。最近有一篇帖子 - 在过去几天 - 如果你搜索'CGAffineTransform',你应该能够找到它(或类似的帖子)并看看它是如何完成的。