3

私はUIViewからUIImageを生成するために以下を使用しています

UIGraphicsBeginImageContextWithOptions(view.frame.size, YES, [[UIScreen mainScreen] scale]);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

通常は機能しますが、約半分の時間で、renderInContext が呼び出されると次のエラーが発生します。

<Error>: CGContextDrawImage: invalid context 0x84d0b20

なぜこれが起こるのか、またはそれがいつ起こるかを検出する方法さえ知っている人はいますか? コンテキストのアドレスが 0x0 であれば、少なくともテストして対処できるものになるので気分が良くなると思いますが、これまでのところ、これには困惑しています。

編集:おっと。view.bounds.size ではなく、view.frame.size を使用することを意味します。

4

3 に答える 3

6

幅または高さがゼロのコンテキストを作成すると、そのコンテキストは無効になります。これは、ビューのサイズがいずれかの軸でゼロの場合、またはビューが の場合に発生する可能性がありnilます。

また、レイヤーをレンダリングしているため、ビューの境界画面のスケールではなく、レイヤーの境界とスケールを取得したい場合があります。ほとんどの場合、これらの値は同じですが、そうでない場合も考慮しておくことをお勧めします。

// Debugging output to see how if an invalid context is being created due to zero size.
NSLog(@"View = %@", view);
NSLog(@"View size = %@", NSStringFromCGSize(view.bounds.size));

UIGraphicsBeginImageContextWithOptions(view.layer.bounds.size, YES, view.layer.contentsScale);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
于 2012-04-25T05:17:49.683 に答える
0
UIGraphicsBeginImageContext(self.view.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

うまくいけば、これはあなたを助けるでしょう....

于 2012-04-25T04:38:32.510 に答える