2010-06-14 68 views
0

我有一個應用程序,從用戶圖像構建幻燈片。他們可以從他們的圖書館中抓取圖片或拍照。我發現重複使用從圖書館抓取圖像是很好的。但重複使用拍攝照片會導致不穩定的行爲。我一直在崩潰,但大部分情況似乎是在「didFinishPickingMediaWithInfo」之後重新加載視圖,這會導致混亂。應該重複使用相機崩潰的應用程序?

我沒有泄漏,它似乎是在每張照片拍攝後正確釋放。我正在調整圖像大小並將其保存在數據庫中。有沒有人遇到這種情況?相機是不是被設計爲經常被調用?

+1

你肯定有什麼錯,僅僅是因爲你可以在正常使用相機時幾乎無限期地繼續拍照。除非在SDK中有一些錯誤的行爲,但我敢肯定,沒有什麼是嚴重的 - 至少如果您在Google上找不到任何信息。 – 2010-06-14 20:27:18

+0

發佈您的代碼我們可能會幫助 – Daniel 2010-06-14 20:28:03

+0

謝謝,代碼剛剛發佈 – Sam 2010-06-14 21:19:32

回答

0

對不起。它不是連續的,它是拍攝照片,取出並釋放相機,然後用戶選擇A,B或C選項(它們會在整個過程中提示選擇許多東西),然後他們可以拍攝另一張照片,取出並釋放相機。 ..等等......這些事情發生了幾次,他們完成了所有的數據輸入。

他們選擇相機後,我稱之爲代碼。我沒有在dealloc方法中釋放圖像選擇器。

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

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

}

從相機我叫下面的代碼,他們「用」拍攝的照片後。它基於圖像的原始大小調整圖像大小。

- (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; 

}

我知道我做了很多這樣的形象。如果我投入幾次延遲會有幫助嗎?