我使用UIViews进行了3x3单元格布局。所以有9个UIViews !!!
我试图单独截取这9个UI视图。但无论我做了什么,我都只能截取第一张UIview。
HEre是包含9个子视图的主视图的屏幕截图:
我想通过发送_tile2截取第二个图块,但我得到的最终结果只是_tile1。
以下是代码:
[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!!!
答案 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
我不确定为什么以及它是如何发生的。经过几次试验,错误消失了。我甚至不知道如何重现它!!!!!