2009-04-25 3 views
22

UIViewには、画像とそのサブビューとしてのボタンがあります。私はrenderInContext、または他の方法を使用してそれの "スナップショット"イメージを取得したいと思います。子を持つUIViewをレンダリングする

[clefView.layer renderInContext:mainViewContentContext]; 

私は私のUIView(上記のように)それを渡すと、私は空白のビットマップを取得します。いずれの子もビットマップにレンダリングされません。

イメージである子ビューを渡すと、そのビットマップのイメージが表示され、兄弟(ボタン)も表示されません。

私は、renderInContextが画像を撮影し、それがすべて子どもに見えるようにして、それをビットマップにレンダリングすることを望んでいました。誰にどのようにこれを行うためのアイデアを持っていますか?シンプルな4行バージョンが私のために動作しませんでした

UIGraphicsBeginImageContext(clefView.bounds.size); 
[clefView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

答えて

35

はこのような何かを試してみてください。私はUIView(サブレイヤを持つ)と子UITextViewを持っています。 UIViewをUIImageにレンダリングすることはできますが、子のUITextViewはレンダリングされません。次のように

私の簡単な解決策は以下のとおりです。

CGRect rect = [view bounds]; 
UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0.0f); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

[view.layer renderInContext:context]; 
for (UIView *sv in view.subviews) 
{ 
    CGContextTranslateCTM(context, sv.frame.origin.x, sv.frame.origin.y); 
    [sv.layer renderInContext:context]; 
    CGContextTranslateCTM(context, -sv.frame.origin.x, -sv.frame.origin.y); 
} 

UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

注CGContextTranslateCTMの簡単な使用は、子ビューが何の翻訳以外の変革ていることを前提としないこと。また、私は、子ビューが親ビューフレーム内に完全に含まれていると仮定しています。

+0

ありがとうございましたが、それはしませんでした。私は同じ結果を得る。問題は、私が思うに、renderInContextは、サブビューをトラバースしていないだけで、それに渡される最上位のレイヤーをやっているということです。各サブビューに対してrenderInContextを呼び出さなければなりませんか? – mahboudz

+0

もう一度試してみてください。これが正解です。私のImageContextはスーパービューではなく、兄弟ビューに設定されていました。 ありがとう! – mahboudz

+0

これは私が遭遇した他のどの方法よりも優れています。 – freespace

0

関連する問題