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 ) 信息。使用它来构建您在 1 中定义的模型,传入唯一标识用户正在使用的“应用程序数据”的信息。myEditorController 对 userInfo 不做任何事情,只是将它传回给您的委托。
  3. 当您的委托方法被回调时,检查 userInfo 中的数据(在读取它时插入它的同一控制器)并使用它连接回应用程序数据。以这种方式接近它与您正在做的事情有点“倒退”。锻炼,而不是锻炼。
  4. 考虑将图像写入文件系统而不是 UserDefaults,我认为这是专门用于图像的更好选择。您可以使用唯一的字符串键将数据模型的其余部分连接到文件系统路径。
于 2012-11-19T23:21:11.280 回答