2011-07-25 89 views

回答

18

你可以使用uiimagepickercontroller來達到這個目的。首先,導入MobileCoreServices.framework。然後拉起相機:

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
     NSArray *media = [UIImagePickerController 
          availableMediaTypesForSourceType: UIImagePickerControllerSourceTypeCamera]; 

     if ([media containsObject:(NSString*)kUTTypeImage] == YES) { 
      UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
      picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
      //picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; 
      [picker setMediaTypes:[NSArray arrayWithObject:(NSString *)kUTTypeImage]]; 

      picker.delegate = self; 
      [self presentModalViewController:picker animated:YES]; 
      //[picker release]; 

     } 
     else { 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unsupported!" 
                  message:@"Camera does not support photo capturing." 
                  delegate:nil 
                cancelButtonTitle:@"OK" 
                otherButtonTitles:nil]; 
      [alert show]; 
      [alert release]; 
     } 

    } 
    else { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unavailable!" 
                 message:@"This device does not have a camera." 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
     [alert release]; 
    } 

然後,通過實施uiimagepickercontrollerdelegate保存照片和保存功能:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    NSLog(@"Media Info: %@", info); 
    NSString *mediaType = [info valueForKey:UIImagePickerControllerMediaType]; 

    if([mediaType isEqualToString:(NSString*)kUTTypeImage]) { 
     UIImage *photoTaken = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

     //Save Photo to library only if it wasnt already saved i.e. its just been taken 
     if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { 
      UIImageWriteToSavedPhotosAlbum(photoTaken, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 
     } 


    } 

    [picker dismissModalViewControllerAnimated:YES]; 
    [picker release]; 
} 

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { 
    UIAlertView *alert; 
    //NSLog(@"Image:%@", image); 
    if (error) { 
     alert = [[UIAlertView alloc] initWithTitle:@"Error!" 
              message:[error localizedDescription] 
              delegate:nil 
           cancelButtonTitle:@"OK" 
           otherButtonTitles:nil]; 
     [alert show]; 
     [alert release]; 
    } 

} 

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { 
    [picker dismissModalViewControllerAnimated:YES]; 
} 

圖像更多信息:didFinishSaving ....可以在這裏找到

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKitFunctionReference/Reference/reference.html

也可以看看這個帖子

https://stackoverflow.com/questions/1282830/uiimagepickercontroller-uiimage-memory-and-more

+0

這對我來說是正確的工作..我捕獲的圖像正在成功保存到設備庫,但我想知道是否有可能將圖像保存在畫廊的特定文件夾(如新專輯)?謝謝 –

5

它是不可能在模擬器中。您必須使用該設備。

2

我希望你意識到模擬器沒有相機.....所以我猜這是不可能的。你絕對可以使用一個設備....你可以使用UIImagePickerController捕捉圖像。

0

有3個prerequesites拍照編程需要:

  1. 的裝置需要具有由

    照相機檢查
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    
  2. 相機控制需要被隱藏(選擇器是一個的UIImagePickerController )

    picker.showsCameraControls = NO; 
    
  3. 使用takePi來自UIImagePickerController

    [picker takePicture];

附註,因爲它確實讓我誤了幾分鐘,takePicture方法也會關閉視圖。

還張貼在這裏Other Stack answer

相關問題