3

サブレイヤーを使用UIViewしてのイメージを作成しようとしています。CALayerこのコードで

- (UIImage*)snapshot{
    UIGraphicsBeginImageContext(self.bounds.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}

画像は表示されますが、画面に表示されているものを正確に表していない。特に、CAShapeLayerマスクプロパティを尊重しません。丸みを帯びた角が画像に表示されません。

これは、例が画面にどのように表示されるかと、画像にどのように表示されるかを比較したものです。 ここに画像の説明を入力してください

明確にするために、右側の画像は古いオブジェクトと同じ位置に配置され、基本的にオブジェクトをラスタライズします。それが同じ背景がある理由です。それは私が画像をキャプチャしているオブジェクトの一部ではありません。

CAShapeLayer画像にマスクを保持したまま、オブジェクトの画像をキャプチャするにはどうすればよいですか?

編集:問題はパスではなく、レイヤーマスクだったようです。

4

2 に答える 2

1

self.bounds.sizeとを使用する代わりにself.layer、角が丸くなっているビューを使用してください。もしそうimageViewなら

- (UIImage*)snapshot
{
    UIGraphicsBeginImageContext(imageview.size);
    [imageview.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}
于 2012-06-15T06:43:24.557 に答える