gpt4 book ai didi

iphone - 如何从 CALayer 中仅获取部分矩形?

转载 作者:行者123 更新时间:2023-12-03 19:17:05 24 4
gpt4 key购买 nike

我得到了 UITextView 的“快照”作为 CGImage,但问题是 UITextView 的内容非常长(大约 110k contentSize.height ),当我将 UITextView 层渲染到上下文中时内存使用量变为约 130MB,这会导致应用程序在设备上运行时崩溃。

这是代码。 viewref 是 UITextView 的一个实例。

UIGraphicsBeginImageContext(self.viewref.contentSize);
CGContextRef ctx = UIGraphicsGetCurrentContext();

//render the text
CALayer *tLayer = self.viewref.layer;
[tLayer renderInContext:ctx];

//get the "snapshot"
CGImageRef imageRef = [UIGraphicsGetImageFromCurrentImageContext() CGImage];
UIGraphicsEndImageContext();

那么,我可以只将 UITextView 层的一部分渲染到图像上下文吗?

最佳答案

尝试如下操作:(未经测试,但您会明白要点)

CGSize contentSize = self.viewref.contentSize;
CGFloat verticalChunkHeight = 1024.0;
CGFloat verticalOffset = 0.0;

while (verticalOffset < contentSize.height)
{
CGFloat height = fmin(verticalChunkHeight, contentSize.height - verticalOffset);

UIGraphicsBeginImageContext(CGSizeMake(contentSize.width, height));
CGContextRef ctx = UIGraphicsGetCurrentContext();

CGContextTranslateCTM(ctx, 0.0, -verticalOffset);
CGContentClipToRect(ctx, CGRectMake(0.0, verticalOffset, contentSize.width, height));

CALayer *tLayer = self.viewref.layer;
[tLayer renderInContext:ctx];

CGImageRef imageRef = [UIGraphicsGetImageFromCurrentImageContext() CGImage];

// do something with imageRef

UIGraphicsEndImageContext();
}

关于iphone - 如何从 CALayer 中仅获取部分矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1099260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com