我发现这段代码完美无缺。但它使用了scrollview的大小。我想用我的尺码。
UIScrollView *contentScrollView;....//scrollview instance
UIGraphicsBeginImageContextWithOptions(contentScrollView.bounds.size,
YES,
[UIScreen mainScreen].scale);
//this is the key
CGPoint offset=contentScrollView.contentOffset;
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), -offset.x, -offset.y);
[contentScrollView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *visibleScrollViewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
如果我想使用我的CGSize,我应该对CGContextTranslateCTM
使用什么?
修改
我的scrollView
尺寸为350 x 350.我添加了imageView
作为其子视图。
用户可以缩放和滚动scrollView。
用户完成缩放/滚动后,用户可以单击“保存”按钮。此按钮采用我的scrollView
从上面的代码。我的屏幕截图图像大小为350 x 350(与scrollView
大小相同)。我想截取大小为1040 x 1040的scrollView截图,并获得正确的缩放/滚动区域。
我知道我可以通过这样做来改变大小:
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1040, 1040), YES, [UIScreen mainScreen].scale);
但我不知道如何根据新尺寸更改偏移部分。
答案 0 :(得分:0)
如果您使用drawViewHierarchyInRect:
,则可以跳过内容偏移和缩放开始。它将简单地渲染给定矩形中滚动视图的可见区域。
这将允许您传递自定义尺寸,并相应地按比例放大或缩小。
例如:
CGSize size = (CGSize){1040, 1040};
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
[scrollView drawViewHierarchyInRect:(CGRect){CGPointZero, size} afterScreenUpdates:NO];
UIImage* img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
如果你仍然想自己渲染图层,那么你只需要根据新尺寸与滚动视图大小的比例来缩放上下文(因为renderInContext
使用了图层' s大小,而不是上下文的大小),然后由内容偏移量抵消。
例如:
CGSize size = (CGSize){1040, 1040};
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextScaleCTM(ctx, size.width/scrollView.bounds.size.width, size.height/scrollView.bounds.size.height);
CGContextTranslateCTM(ctx, -scrollView.contentOffset.x, -scrollView.contentOffset.y);
[scrollView.layer renderInContext:ctx];
UIImage* img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();