2011-04-08 8 views
0

私のプロジェクトにはUIImagesという2つ、imageViewという名前のもの、Birdieという名前のプロジェクトがあります。2つのUIImageViewsをマージして保存する

- (UIImage *)addImage:(UIImage *)imageView toImage:(UIImage *)Birdie { 
    UIGraphicsBeginImageContext(imageView.size); 

    // Draw image1 
    [imageView drawInRect:CGRectMake(0, 0, imageView.size.width, imageView.size.height)]; 

    // Draw image2 
    [Birdie drawInRect:CGRectMake(0, 0, Birdie.size.width, Birdie.size.height)]; 

    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    return resultingImage; 
} 

-(void)captureScreen{ 
    UIImageWriteToSavedPhotosAlbum(resultingImage, nil, nil, nil); 
} 

これは私のコードです。captureScreenボタンは画像を保存するためのボタンです。 resultingImageは宣言されていないので動作しませんが、私はこれを修正する方法がわからないので、Xcodeの新機能です。

事前に感謝します。

答えて

0
`resultingImage` 

は、その範囲は、このメソッドを呼び出すと、このメソッドによって返されるオブジェクトを使用する必要が唯一の- (UIImage *)addImage:(UIImage *)imageView toImage:(UIImage *)Birdie方法に限定されているグローバル変数ではありません。

-(void)captureScreen{ 
    UIImage *resultingImage = [self addImage:yourFirstImage toImage:yourSecondImage]; 
    UIImageWriteToSavedPhotosAlbum(resultingImage, nil, nil, nil); 
} 

ティム、あなたは私たちが直接「のdrawRect」メソッドを呼び出すことはできませんTHTを覚えておく必要があります 一点。 システムによって呼び出されます。 ここでは、UIImageで使用できる他の方法を使用する必要があります。 'imageNamed:'メソッドを使用できます。

+0

のようなアクションは、私の質問に答えてくれてありがとう。私はあなたが投稿したものと 'captureScreen'コードを置き換えようとしました。しかし、ボタンを押すとアプリケーションがクラッシュするようです。 もう一度おねがいします! – Tim

+0

クラッシュレポートには何が表示されますか? – Ravin

+0

トップコード(-UIImage ...): "'imageView'のローカル宣言はインスタンス変数を隠します。" "ローカル宣言 'Birdie'はインスタンス変数を隠します。"ボタンボイドの部分では、「Objective-C型の構造体「struct UIImageView *」と互換性があり、構造体UIImage *が別のObjective-C型のaddImage:toImage: 'の引数1を渡すときに必要です。ありがとうございました! – Tim

1

このようなことができます。

オーバーライド-(void)captureScreen:(UIImage*)imageToSave

にこの-(void)captureScreen:方法は、あなたのボタンで

- (IBAction)myButton:(id)sender{ [self captureScreen:[self addImage:imageViewImage toImage:BirdieImage]] }

関連する問題