Ios UIView上所需CGRect的屏幕截图
我用UIView做了一个3x3单元布局。所以有9个视图 我试图分别截图这9个UIView。但不管我怎么做,我只能截图第一次查看 以下是包含9个子视图的主视图的屏幕截图: 我想通过发送_tile2截图第二个tile,但我得到的最终结果只有_tile1 : 代码如下: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,它
[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的屏幕截图