2011-02-18 104 views
2

我无法找出最有效和“优雅”的方法来完成某项任务。问题定义如下: 我想要显示多个视图,其中之一是具有相机胶卷来源的ImagePicker。ImagePicker在视图层次结构问题

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

我尝试了好几种选择:

1.

a)主视图显示选择器视图模式方式。 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]; 
} 

问题是,它不工作,引起控制器不能驳回另一个(previouse不会立即消失之后显示下一个模态,主要是不活跃立即并且不能呈现新的)。

2. MAIN 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]; 
} 

问题是,我不能调用presentModalViewController在viewDidLoad方法,因为它将无法正常工作(我猜这是在视图控制器的生命周期为时尚早)。我也尝试viewDidAppear,但在这种情况下,我必须设置一些伊娃国旗,显示选择器视图只有一次,空图像处理视图短时间之前显示图像选择器视图,我不想这样。

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

请给我一些建议,因为我真的失去了我的路,此刻

+0

你可以发布一些示例代码? – dhirschl 2011-02-18 15:16:18

+0

发布更新了样本 – 2011-02-18 16:29:53

回答

2

在您的主视图控制器,使用viewDidAppear:动画: - 当模式转变已经完成,这将被调用。你可以安全地从那里开始另一种模式转换。