0

* ViewController には、保持するイメージのコピーが必要です。PresentViewController が閉じられた後に消えます – *


xibをUIViewController使用してpresentViewController(modalViewController)を呼び出す元があります。xib の内部にはUIImageView、マーカーでマークアップ (描画) できる があります。私の問題は、presentViewController を閉じると、設定した変数 (a UIImage) が に戻りnil、マークアップ イメージをUIImageViewmainの a に設定できないことUIViewControllerです。

描画コード:

UITouch *touch = [touches anyObject];
currentPoint = [touch locationInView:drawImage];

UIGraphicsBeginImageContext(drawImage.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0,
                                       drawImage.frame.size.width,
                                       drawImage.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

//Savve the drawings on image to a UIImage
savedMarkup = drawImage.image;
lastPoint = currentPoint;

メイン UIVC に描画されたイメージを設定するコードの2 つのメソッドABを試しました。

上記の行を削除すると方法 A は機能しますUIGraphicsEndImageContextが、この行を削除すると、多くのメモリ警告が表示され、予想どおり、いくつかの描画後にクラッシュします。

方法 A: UIGraphicsBeginImageContextWithOptions(AView.drawImage.bounds.size, NO, 0.0);

[AView.drawImage.image drawInRect:CGRectMake(0, 0,
                                            AView.drawImage.frame.size.width,
                                            AView.drawImage.frame.size.height)];
UIImage *savedMarkup = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

AView.annotatedImage.image = savedMarkup;
[annotation dismissViewControllerAnimated:YES completion:nil];

方法 B:

AView.annotatedImage.image = AView.savedMarkup; 

方法 B ではNSLog、値がAView.savedMarkup- の場合、"(null)" がログに記録されます。

私はこれを理解するためにガタガタしてきました!あなたの助けは非常に高く評価されています!

4

2 に答える 2

1

これを見てください:

uikitを使った簡単お絵かきアプリの作り方

それはあなたに役立つかもしれません:)

于 2013-09-13T15:07:30.127 に答える