2010-06-14 12 views
0

J'ai une application qui construit un diaporama à partir d'images de l'utilisateur. Ils peuvent s'emparer de leur bibliothèque ou prendre une photo. J'ai trouvé que l'utilisation répétée de saisir une image de la bibliothèque est bien. Mais l'utilisation répétée de prendre une photo provoque un comportement erratique. J'ai eu des plantages mais surtout ce qui se passe semble être un rechargement de la vue après "didFinishPickingMediaWithInfo", ce qui chamboule les choses.L'utilisation répétée de l'appareil photo doit-elle provoquer le blocage d'une application?

Je n'ai pas de fuite et il semble que je relâche correctement après chaque photo. Je redimensionne l'image et l'enregistre dans une base de données. Est-ce que quelqu'un d'autre se heurte à cette situation? L'appareil photo n'a-t-il pas été conçu pour être appelé souvent?

+1

Vous avez certainement quelque chose de mal simplement basé sur le fait que vous pouvez continuer à prendre des photos assez indéfiniment lorsque vous utilisez l'appareil photo normalement. À moins qu'il y ait un comportement bogué dans le SDK, mais je suis presque sûr qu'il n'y a rien de grave - du moins si vous ne trouvez aucune information sur Google. –

+0

postez votre code, nous pourrions être en mesure d'aider – Daniel

+0

Merci, le code vient de poster – Sam

Répondre

0

Désolé pour la confusion. Ce n'est pas continu, il faut prendre une photo, retirer et relâcher la caméra, puis l'utilisateur sélectionne le choix A, B ou C (ils sont invités à faire des sélections sur beaucoup de choses) puis ils peuvent prendre une autre photo, retirer et relâcher la caméra. ..etc ... et cela arrive plusieurs fois pendant qu'ils complètent toutes les entrées de données. Après avoir sélectionné la caméra, j'appelle ce code. Je ne libère pas le sélecteur d'image dans la méthode dealloc.

- (void)openCamera { 
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
{ 

    imagePicker = [[UIImagePickerController alloc] init]; 
    imagePicker.delegate = self; 
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    [self presentModalViewController:imagePicker animated:YES]; 
[imagePicker release]; 
} 

}

Après leur "utilisation" d'une photo prise par l'appareil photo que j'appelle le code suivant. Il a redimensionné l'image en fonction de la taille d'origine de l'image.

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

UIImage *tempCameraImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
    [picker dismissModalViewControllerAnimated:YES]; 

    CGFloat originalSize = tempCameraImage.size.width * tempCameraImage.size.height; 
    NSLog(@"Original Size %f", originalSize); 
    if (originalSize > 2500000.0) { 
     CGSize size = tempCameraImage.size; 
     CGRect rect = CGRectMake(0.0, 0.0, .23 * size.width, .23 * size.height); 
     UIGraphicsBeginImageContext(rect.size); 
     [tempCameraImage drawInRect:rect]; 
     theImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     CGFloat totalSize = theImage.size.width * theImage.size.height; 
     NSLog(@"Final Camera Size %f", totalSize); 
     [self resizeImageCamera]; 
     return; 
    } 
    else { 
     CGSize size = tempCameraImage.size; 
     CGRect rect = CGRectMake(0.0, 0.0, .27 * size.width, .27 * size.height); 
     UIGraphicsBeginImageContext(rect.size); 
     [tempCameraImage drawInRect:rect]; 
     theImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     CGFloat totalSize = theImage.size.width * theImage.size.height; 
     NSLog(@"Final Camera Size %f", totalSize); 
     [self resizeImageCamera]; 
     return; 
    } 

}

-(void)resizeImageCamera { 
if (editingImage1) { 
    NSManagedObject *image = [NSEntityDescription insertNewObjectForEntityForName:@"Image" inManagedObjectContext:slideshow.managedObjectContext]; 
    slideshow.image = image; 
    [image setValue:theImage forKey:@"image"]; 

    CGSize size = theImage.size; 
    CGRect rect = CGRectMake(0.0, 0.0, .15 * size.width, .15 * size.height); 
    UIGraphicsBeginImageContext(rect.size); 
    [theImage drawInRect:rect]; 
    slideshow.thumbnailImage1 = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    [self finishCameraImage]; 
    return; 
} 

}

-(void)finishCameraImage { 

if (editingImage1) { 
    keyInt = @"2"; 
    [editedObject setValue:keyInt forKey:@"script1"]; 
    pictureView.alpha = 0; 
    self.navigationItem.rightBarButtonItem = nil; 
    editedFieldKey = @"line2Int"; 
    editedFieldName = NSLocalizedString(@"line2Int", @"display name for line2"); 
    self.title = editedFieldName; 
    linePicker.hidden = NO; 

}

Je me rends compte que je fais beaucoup à cette image. Si je mettais quelques retards, cela aiderait-il?