2012-11-30 10 views
14

Resim seçiciden bir görüntü seçtikten sonra bir modal görüntü denetleyicisi oluşturmaya çalışıyorum.iOS: Uyarı: Bir sunum devam ederken <ViewController> üzerindeki <ModalViewController> öğesini sunmaya çalışın

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 

    NSLog(@"Picker has returned"); 
    [self dismissModalViewControllerAnimated:YES]; 



    // TODO: make this all threaded? 
    // crop the image to the bounds provided 
    img = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    NSLog(@"orig image size: %@", [[NSValue valueWithCGSize:img.size] description]); 

    // save the image, only if it's a newly taken image: 
    if([picker sourceType] == UIImagePickerControllerSourceTypeCamera){ 
     UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil); 
    } 

    // self.image_View.image=img; 
    //self.image_View.contentMode = UIViewContentModeScaleAspectFit; 


    ModalViewController *sampleView = [[ModalViewController alloc] init]; 
    [self presentModalViewController:sampleView animated:YES]; 
} 

Ancak, uyarı alabilirsiniz: Ben kodu kullanabilirsiniz

Warning: Attempt to present <ModalViewController: 0x7561600> on <ViewController: 0x75a72e0> while a presentation is in progress! 

ve kalıcı görünüm görünmüyor.

Neyi yanlış yapıyorum?

+0

** TAM ÇÖZÜM **, John cevap: http://stackoverflow.com/questions/14453001/meaning-of-warning-while- a-presentation-devam ediyor – Fattie

cevap

28
- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    // TODO: make this all threaded? 
    // crop the image to the bounds provided 
    img = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    NSLog(@"orig image size: %@", [[NSValue valueWithCGSize:img.size] description]); 

    // save the image, only if it's a newly taken image: 
    if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera) { 
     UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil); 
    } 

    // self.image_View.image = img; 
    // self.image_View.contentMode = UIViewContentModeScaleAspectFit; 

    NSLog(@"Picker has returned"); 
    [self dismissViewControllerAnimated:YES 
          completion:^{ 
           ModalViewController *sampleView = [[ModalViewController alloc] init]; 
           [self presentModalViewController:sampleView animated:YES]; 
          }]; 
} 
+1

Görünüm denetleyicisi işten çıkarıldıktan sonra tamamlama bloğu yürütülürken bunu eklemek için hemen sonra, hemen değil. viewWillAppear ve viewDidAppear tamamlanma blokunuzdan önce koşma şansınız olsun. –

+0

Kısa bir not, çünkü bir keresinde Runtastic'teki bir personel temsilcisi tarafından sorulmuştum ve bunu bilmiyordum: – NicTesla

5

Sorun ilk olarak UIImagePicker'u reddediyorsunuz ve derhal başka bir görünümü modal görünüm olarak görüntülüyorsunuz. Bu yüzden bu hatayı alıyorsun. Aşağıdaki kod ile

Kontrol: BURADA

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 

[self dismissViewControllerAnimated:NO completion:^{ 

    img = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    NSLog(@"orig image size: %@", [[NSValue valueWithCGSize:img.size] description]); 

    if([picker sourceType] == UIImagePickerControllerSourceTypeCamera) 
    { 
     UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil); 
    } 

    ModalViewController *sampleView = [[ModalViewController alloc] init]; 
    [self presentModalViewController:sampleView animated:YES]; 
    }]; 
} 
+0

Yine de – Moxy

+1

animasyonuyla onu reddedebilirsiniz. Cevabınız aynen benimki gibidir (aynı cevabın iki kez aynı şekilde gönderilmemesi için benimkileri iptal edeceğim). Çözüm, tamamlama işleyicisiyle yapılan yöntemdir. Ama eğer [self dismissModalViewControllerAnimated: NO] kullandıysa, o uyarıyı hiç almazdı. – Moxy

+0

@Moxy: cevabınızı silmeyin. Her iki cevap arasında çok fark var. Seninki en iyisi. Yani silmeyin. –

İlgili konular