4

UITextView の「スナップショット」を CGImage として取得していますが、問題は UITextView のコンテンツが非常に長く (約 110k contentSize.height )、UITextView レイヤーをコンテキストにレンダリングするとメモリ使用量が増えることです。デバイスで実行するとアプリケーションがクラッシュする原因となる最大 130 MB。

これがコードです。viewrefUITextView のインスタンスです。

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 レイヤーの一部のみを画像コンテキストにレンダリングできますか?

4

2 に答える 2

3

次のようなことを試してください: (テストされていませんが、要点はわかります)

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();
}
于 2009-07-16T12:09:25.263 に答える
0

これを達成する方法はいくつかあります。UITextView自体はUIScrollerを継承するため、特定の領域に境界を設定し、その領域のスナップショットを作成できる必要があります(画面に表示されているかのように)。

CGImageスナップショットをどの程度正確に作成していますか?

于 2009-07-08T22:15:23.773 に答える