视图层次结构问题中的ImagePicker

时间:2011-02-18 13:53:42

标签: iphone objective-c cocoa-touch ios

我无法找出执行某项任务的最有效和“优雅”的方法。问题定义是: 我想显示几个视图,其中一个是带有相机胶卷源的ImagePicker。

层次结构看起来类似于: 主要观点---> PICKER --->图像处理视图 当用户点击“后退按钮”时,UI必须允许后退显示。

我尝试了几种方法:

1

a)MAIN VIEW以模态方式显示选择器视图。 b)在didFinishPickingMediaWithInfo委托方法中,关闭选择器模态视图,然后调用带有IMAGE PROCESSING VIEW的presentModalViewController。

示例代码:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage* pickedImage = [info valueForKey:UIImagePickerControllerEditedImage];
    LastViewController* vc = [[LastViewController alloc] init];
    vc.mainImage = pickedImage;

    [self dismissModalViewControllerAnimated:NO];

    [self presentModalViewController:vc animated:NO];
}
问题是,它不起作用,导致控制器在解除另一个模式后无法显示下一个模态(上一个模式不会立即消失,MAIN不立即激活,并且不能呈现新模式)。 / p>

2。 MAIN VIEW以模态方式显示IMAGE PROCESSING VIEW,但在此之后IMAGE PROCESSING VIEW立即以模态方式呈现选择器视图,等待完成,解除选择器和用户可以看到图像处理视图与库中的图像。

示例代码:

在主视图控制器的某些操作中:

ImageProcessViewController *vc = [[ImageProcessViewController alloc] initWithNibName:@"ImageProcessViewController" bundle:nil];
vc.delegate = self;
vc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:vc animated:NO];
[vc release];
ImageProcessViewController中的

- (void)viewDidLoad {
    [super viewDidLoad];

    //some UI init here

    if(self.sourceType == UIImagePickerControllerSourceTypePhotoLibrary) {
        UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
        ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        ipc.delegate = self;
        ipc.allowsEditing = YES;
        [self presentModalViewController:ipc animated:NO];
        [ipc release];
    }
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage* pickedImage = [info valueForKey:UIImagePickerControllerEditedImage];
    self.mainImage = pickedImage;

    [self dismissModalViewControllerAnimated:NO];
}

问题是,我不能在viewDidLoad方法中调用presentModalViewController,因为它不起作用(我认为它在视图控制器实时循环中太早)。我也试过viewDidAppear,但是在那种情况下我必须设置一些ivar标志,只显示一次选择器视图,并且在图像选择器视图之前显示空图像处理视图很短时间,我不希望这样。

3。 我试图弄清楚如何使用导航控制器来做到这一点,因为UIImagePickerController正在使用他的导航控制器,但这是私有结构和文档说程序员不能这样做。

请给我一些建议,因为我现在真的迷路了

1 个答案:

答案 0 :(得分:2)

在主视图控制器中,使用viewDidAppear:animated: - 这将在模态转换完成时调用。您可以安全地从那里开始另一个模态转换。