UIView

时间:2015-11-09 23:16:22

标签: ios objective-c uiview

我使用UIViews进行了3x3单元格布局。所以有9个UIViews !!!

我试图单独截取这9个UI视图。但无论我做了什么,我都只能截取第一张UIview。

HEre是包含9个子视图的主视图的屏幕截图:

enter image description here

我想通过发送_tile2截取第二个图块,但我得到的最终结果只是_tile1。

enter image description here

以下是代码:

     [self saveImage:[self screenshotTile:_tile2]]; //_tile1,_tile2...._tile9 gave the same result

我相信如果我发送_tile1,它应截取self.view上的_tile1区域,如果我发送_tile2,它应该截取self.view上的_tile2区域。但是无论我发送什么,它仅捕获视图上的_tile1区域。

-(void)saveImage:(UIImage *)img{

    UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
}

-(UIImage *)screenshotTile :(UIView *)imgV{

    UIGraphicsBeginImageContext(imgV.frame.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    _tileImg1 = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return _tileImg1;
 }

我尝试了this解决方案,建议在拍摄截图后移动图像,但它也没有用:

     UIGraphicsBeginImageContext(sshot.frame.size);
     [sourceImage drawAtPoint:CGPointMake(-50, -100)]; // I tried -imgV.frame.origin.v, -imgV.frame.origin.y but it didnt work for me!!!

2 个答案:

答案 0 :(得分:0)

您将磁贴传递给screenshotTile:方法。在该方法中,您实际上从未使用磁贴。您可能希望将renderInContext:发送至imgV.layer,而不是self.view.layer

答案 1 :(得分:0)

经过几次试验,我设法通过使用此代码来实现它:

CGContextRef c = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(c, -imgV.frame.origin.x, -imgV.frame.origin.y);

[self.view.layer renderInContext:c];

我需要根据图块框架移动上下文x轴和y轴。上下文总是从0,0点开始,所以我需要根据图块框架移动图像。

在这样做的过程中,我遇到了一个奇怪的错误,这使我无法将图像保存到相机胶卷中:

Connection to assetsd was interrupted or assetsd died

我不确定为什么以及它是如何发生的。经过几次试验,错误消失了。我甚至不知道如何重现它!!!!!