1

次のようにスクリーンショットを撮っています。

- (UIImage*)screenshot 
{
    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
    CGRect rect = [keyWindow bounds];
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [keyWindow.layer renderInContext:context];
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}

UIViewでは、を使用してパスを描画していますUIBezierPath

私が取得しているスクリーンショットは、このように正しくありません

ここに画像の説明を入力してください

なぜ上部が空白にカットされているのか、何か考えはありますか?UIViewでは、すべての図面が正しく表示されます。


UIBezierPath更新:これは、ブラシを離してスクリーンショットを取得するときに長いパスを描画すると、スクリーンショットが正しく取得されるときに発生します。

4

3 に答える 3

1

あなたが投稿した別のスレッドを見ました。アップルのテクニカルQ&Aによると、最初にジオメトリ座標を調整する必要があります。したがって、ウィンドウのレイヤーをレンダリングする前に、まず次のことを行います。

// -renderInContext: renders in the coordinate space of the layer,
// so we must first apply the layer's geometry to the graphics context
CGContextSaveGState(context);
// Center the context around the window's anchor point
CGContextTranslateCTM(context, [window center].x, [window center].y);
// Apply the window's transform about the anchor point
CGContextConcatCTM(context, [window transform]);
// Offset by the portion of the bounds left of and above the anchor point
CGContextTranslateCTM(context,
                      -[window bounds].size.width * [[window layer] anchorPoint].x,
                      -[window bounds].size.height * [[window layer] anchorPoint].y);
于 2012-07-05T10:27:50.770 に答える
0
- (UIImage*)screenshot :(UIView*)vw
{

    CGRect rect = [vw bounds];
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [vw.layer renderInContext:context];
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}

これを使う

于 2012-07-05T08:17:14.380 に答える