3

フォトライブラリから選択した各写真の画像を使用してUIImageViewをプログラムで作成するボタンがあります。写真をビューに配置し、移動することができます。

ユーザーが画像を長押しすると、iPadにUIPopOverControllerが表示されます。そこから、ユーザーはボタンをクリックして、現在タッチされている画像を編集します。

私が抱えている問題は、そのUIImageView.imageに再度アクセスして、編集したばかりの完成した画像に画像を変更できないことです。

これがいくつかのコード例です。

// This figures out what imageView was tapped
- (void)handleEditTapped:(UITapGestureRecognizer *)recognizer {
editImage = (UIImageView*)recognizer.view;

if(UIGestureRecognizerStateBegan == recognizer.state) {
    // Called on start of gesture, do work son!
    popoverEditor = [[UIPopoverController alloc] initWithContentViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"popupEditor"]];
    [popoverEditor presentPopoverFromRect:editImage.bounds inView:editImage permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

}
}

次に、popupEditorビューにあるボタンでeditorControllerをポップアップします。

- (IBAction)effectsEditorButton:(id)sender {

// This part I've been fooling around with to save the image and re-load it to try and get it to work but it loads successfully to the editor but will not save back to uiimageview.image
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *imageData = [defaults dataForKey:@"image"];
UIImage *loadedImage = [UIImage imageWithData:imageData];


myEditorController *editorController = [[myEditorController alloc] initWithImage:loadedImage];
[editorController setDelegate:self];


popoverEditor = [[UIPopoverController alloc] initWithContentViewController:editorController];
[popoverEditor presentPopoverFromRect:self.effectsButtonImage.bounds inView:self.effectsButtonImage permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
   }
}

そして、ユーザーが写真の編集を終了した後、これが呼び出されます。

- (void)photoEditor:(myEditorController *)editor finishedWithImage:(UIImage *)finishedImage
{

// NSLog(@"TAG: %i",editImage.tag); Tried tags but wouldn't hold the .tag value to re reference it. Would always result in 0 after I set the tag to 10 on handleEditTapped

editImage.image = finishedImage;

[self.popoverEditor dismissPopoverAnimated:YES];
}

UIImageView.imageに再度アクセスする方法がわかりません。タグとnsuserdefaultsを試しましたが、役に立ちませんでした。

どんな助けでも大歓迎です!! ありがとうございました!

4

1 に答える 1

0

この質問はアプリケーション ロジックに関するものであり、フレームワーク、iOS、または objc ではなく、オブジェクトの設計方法に大きく依存します。その点に関して、この問題に対処するためにアプリケーションの設計を微調整する方法について、いくつかの提案があります。完全な回答を得るには十分な情報がありませんが、これが役立つことを願っています。

  1. handleEditTapped: を定義する ViewController に適切なデータ モデルがあることを確認します。「プレゼンテーション データ」ではなく「アプリケーション データ」で作業する必要があります。つまり、ユーザーの「選択」を保存し、そのデータを使用してプレゼンテーション UIImageViews を生成します。
  2. myEditorController デリゲート プロトコルを (void)photoEditor:(myEditorController *)editor finishedWithImage:(UIImage )finishedImage withUserInfo:(NSDictionary ) info のようなものに更新します。これを使用して、1 で定義したモデルを構築し、ユーザーが操作している「アプリケーション データ」を一意に識別する情報を渡します。myEditorController は、デリゲートに戻す以外は、userInfo に対して何もしません。
  3. デリゲート メソッドがコールバックされたら、userInfo のデータを検査し (同じコントローラーがデータを読み取っているときと同じように挿入します)、それを使用してアプリケーション データに接続し直します。このようにアプローチすることは、あなたがしていることから一種の「後退」です。インではなくワークアウト。
  4. UserDefaults ではなく、ファイルシステムにイメージを書き込むことを検討してください。これは、特にイメージに適した選択であると考えています。一意の文字列キーを使用して、残りのデータ モデルをファイル システム パスに接続できます。
于 2012-11-19T23:21:11.280 に答える