2012-05-05 3 views
3

У меня есть этот код, который загружает новый UIView (из раскадровки) при нажатии кнопки. Функция goPressed запускается при нажатой кнопке и вызывает функцию selectImage. selectImage открывает UIImagePickerController и позволяет пользователю выбирать фотографию. После того, как пользователь выбрал фотографию, делегат didFinishPickingMediaWithInfo добавляет выбранное изображение в UIImageView.performSegueWithIdentifier не работает

В 'goPressed', после выполнения selectImage, он должен выполнять Segue, например, как // 1. Но ничего не происходит. performSegueWithIdentifier, похоже, не работает. И если я не вызываю [self selectImage] перед вызовом функции performSegueWithIdentifier, он работает. Вот код:

- (IBAction)goPressed:(id)sender { 
    [self selectImage]; 
    [self performSegueWithIdentifier:@"lastView" sender:currentSender]; //1 
} 
-(void)selectImage 
{ 
    // Create image picker controller 
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 

    // Set source to the camera 
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

    // Delegate is self 
    imagePicker.delegate = (id)self; 

    // Allow editing of image ? 
    imagePicker.allowsEditing=NO; 


    // Show image picker 
    [self presentModalViewController:imagePicker animated:YES]; 


} 

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    // Access the uncropped image from info dictionary 
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

    [[picker presentingViewController] dismissModalViewControllerAnimated:YES]; 


    lePreview.image= image; 


} 

Пожалуйста, помогите, почему performSegueWithIdentifier не работает? Надеюсь, у меня нет никакой информации, которая вам нужна.

ответ

13

Я предполагаю, что представление, которое вы пытаетесь перевести, использует изображение, которое вы получаете непосредственно перед тем, как сделать свой сеанс? Если они отменили выборщик изображений, вы все еще хотите переписать?

Если вам нужна фотография, то, возможно, вам следует позвонить в свой segue после того, как делегатский звонок «закончил сбор».

Проблема с Segue не стрельбы может быть из-за анимации все еще происходит здесь:

[[picker presentingViewController] dismissModalViewControllerAnimated:YES]; 

Вы можете попробовать:

[[picker presentingViewController] dismissModalViewControllerAnimated:NO]; 

или если вы хотите сохранить анимацию, движение перейдите к методу «сборщик» и сделайте это следующим образом:

[self dismissModalViewControllerAnimated:YES completion:^() { 
[self performSegueWithIdentifier:@"lastView" sender:self]; 
}]; 

или если это делает n ВЗ работы попробовать этот подход в методе pickerdidfinish (примечание - это должно быть реализовано в качестве делегата в контроллере, который вызывает вид модальный, не модальный вид сам по себе:

//maintain the animation 
[self dismissModalViewControllerAnimated:YES]; 

//slight pause to let the modal page dismiss and then start the segue 
double delayInSeconds = 0.5; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 

    //code to be executed on the main queue after delay 

    [self performSegueWithIdentifier:@"lastView" sender:self]; 

}); 

Я использую этот переход часто и это делает Хороший снимок с модальным видом, затем слайды в режиме segue, и пауза позволяет переходу выглядеть естественным.

+0

Вы получили мою точку зрения, он работает, когда я установил dismissModalViewControllerAnimated: НЕТ ... но если я использую свой код, чтобы сохранить анимацию, XCode дает мне эту ошибку: «UIView, например, сообщения не объявлять метод с селектором Устранение ошибки: завершение « –

+0

ok, дать новый код выстрела. Он обеспечивает небольшой тайм-аут, чтобы анимация могла пройти между сегментами. – CocoaEv

+0

Ух, это уродливо! (а не ваше решение, но способ анимации segue вызывает эту проблему). Похоже, самый простой и чистый способ - отключить анимацию. Спасибо, +1 :) – Jimmy

Смежные вопросы