将图像从子视图绘制到superview中

时间:2014-02-02 01:57:26

标签: ios cocoa-touch uiview uiimageview cgaffinetransform

我提前道歉,这是一个难以解释的问题。 基本上我试图在Photoshop中进行相当于Merge Layers的操作,其中背景图像与所有其他图像合并,并获得Leo指出的新背景图像。

我在superView中有一组UIViews,每个UIView里面都有一个UIImageView。 UIImageViews已经应用了CGAffineTransformation,如果它们变得比UIView大,UIView会变得更大以适应UIImageView。

终极目标:使用所有UIImageViews +背景图像保存图像。

到目前为止,我可以使用以下方法成功访问每个UIImageView:

    for (id obj in self.view.subviews) {
        if ([obj isKindOfClass:[UIView class]] && [((UIView *)obj).subviews.firstObject isKindOfClass:[UIImageView class]]) {

            UIImageView *view = ((UIImageView *)((UIView *)obj).subviews.firstObject);

        }
    }

如何将这些图像与背景图像合并并保留其所有属性。

1 个答案:

答案 0 :(得分:2)

要实现此目的,您可以使用- (BOOL)drawViewHierarchyInRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:NO];
//The merged image.
UIImage * mergedBackground = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

//Remove superviews as they are no longer required.
[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];