Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIView上所需CGRect的屏幕截图_Ios_Objective C_Uiview - Fatal编程技术网

Ios UIView上所需CGRect的屏幕截图

Ios UIView上所需CGRect的屏幕截图,ios,objective-c,uiview,Ios,Objective C,Uiview,我用UIView做了一个3x3单元布局。所以有9个视图 我试图分别截图这9个UIView。但不管我怎么做,我只能截图第一次查看 以下是包含9个子视图的主视图的屏幕截图: 我想通过发送_tile2截图第二个tile,但我得到的最终结果只有_tile1 : 代码如下: [self saveImage:[self screenshotTile:_tile2]]; //_tile1,_tile2...._tile9 gave the same result 我相信如果我发送_tile1,它

我用UIView做了一个3x3单元布局。所以有9个视图

我试图分别截图这9个UIView。但不管我怎么做,我只能截图第一次查看

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

我想通过发送_tile2截图第二个tile,但我得到的最终结果只有_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;
 }
我尝试了一个建议在截图后移动图像的解决方案,但它也不起作用:

     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!!!

将互动程序传递给
屏幕快照互动程序:
方法。在这种方法中,您永远不会实际使用磁贴。也许您想将
renderInContext:
发送到
imgV.layer
,而不是发送到
self.view.layer

经过几次尝试后,我成功地使用了以下代码:

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

[self.view.layer renderInContext:c];
我需要根据平铺框架移动上下文x轴和y轴。上下文总是从0,0点开始,因此我需要根据平铺帧移动图像

在此过程中,我遇到了一个wierd错误,使我无法将图像保存到相机卷:

与assetsd的连接中断或assetsd死亡


我不知道这是为什么和如何发生的。经过几次试验,错误消失了。我甚至不知道我是如何复制它的

为什么要在
屏幕快照互动程序:
中设置ivar(
\u tileImg1
)?我设置它是因为,将来如果我想为捕获的图像添加更多增强功能,我需要它。我更新了问题。请检查!!!你知道为什么会这样吗?这不是我需要罗布的情况!!!如果我发送imgV.layer,我将获得该瓷砖的屏幕截图!!!!但我需要瓷砖下self.view.layer的屏幕截图!!!!正如你所见,有9个彩色瓷砖,如果我截图的瓷砖,我得到的只是彩色瓷砖作为图像。但我需要在瓷砖下的图像是self.view.layer!!!!我正在发送tile-to-screenshot方法,因为我需要self.view.layer上的tile-frame和tile-size的屏幕截图