2014-01-09 24 views
0

我有PickerDidFinishPicking一個問題,它應該叫我從我的iPhone攝像頭的圖像後,但這裏沒有叫是我的代碼:選擇器去把採摘不叫

首先這裏噸.h文件:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> 

@end 

,這裏是M檔:

#import "CameraOverlay.h" 

@interface CameraOverlay() 
@property (nonatomic) UIImagePickerController *imagePickerController; 
@end 

@implementation CameraOverlay 
@synthesize imagePicker; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 


    UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    myButton.frame = CGRectMake(0, 0, 200, 60); 
    myButton.center = self.view.center; 
    [myButton addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchUpInside]; 
    [myButton setTitle:@"Image Picker" forState:UIControlStateNormal]; 

    [self.view addSubview:myButton]; 
    [self buttonPress:self]; 
} 

- (void)buttonPress:(id)sender { 
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 

     // alert the user that the camera can't be accessed 
     UIAlertView *noCameraAlert = [[UIAlertView alloc] initWithTitle:@"No Camera" message:@"Unable to access the camera!" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil]; 
     [noCameraAlert show]; 

    } else { 



     // prepare imagePicker view 
     imagePicker = [[UIImagePickerController alloc] init]; 
     imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
     imagePicker.delegate = self; 
     imagePicker.allowsEditing = NO; 
     imagePicker.showsCameraControls = NO; 

     // create view for overlay 
     CGRect overlayRect = CGRectMake(0, 0, imagePicker.view.frame.size.width, imagePicker.view.frame.size.height); 
     UIView *overlayView = [[UIView alloc] initWithFrame:overlayRect]; 

     // prepare the image to overlay 
     //UIImageView *overlayImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"theKing"]]; 
     //overlayImage.center = overlayView.center; 
     //overlayImage.alpha = 0.5; 

     // prepare toolbar for overlay 
     UIToolbar *overlayToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 600, overlayView.frame.size.width, 40)]; 
     overlayToolbar.center = CGPointMake(overlayView.center.x, overlayView.frame.size.height - 20); 
     overlayToolbar.barStyle = UIBarStyleBlack; 

     UIBarButtonItem *takePictureButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(takePictureButtonPressed:)]; 
     UIBarButtonItem *flexibleBarSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
     flexibleBarSpace.width = 1000; 
     UIBarButtonItem *startStopButton = [[UIBarButtonItem alloc] initWithTitle:@"Snap" style:UIBarButtonItemStyleBordered target:self action:@selector(startStopButtonPressed:)]; 
     UIBarButtonItem *timedButton = [[UIBarButtonItem alloc]initWithTitle:@"Timed" style:UIBarButtonItemStyleBordered target:self action: @selector(timedButtonPressed:)]; 
     UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action: @selector(cancelButtonPressed:)]; 

     overlayToolbar.items = [NSArray arrayWithObjects:takePictureButton, flexibleBarSpace, startStopButton, timedButton, cancelButton, nil]; 


     // [overlayView addSubview:overlayImage]; 
     [overlayView addSubview:overlayToolbar]; 

     // add the image as the overlay 
     imagePicker.cameraOverlayView =overlayView; 

     // display imagePicker 
     [self.navigationController presentViewController:imagePicker animated:YES completion:nil]; 
    } 
} 
-(void)SavePhoto:(UIImage *) imageTosave{ 
    NSData *pngData = UIImagePNGRepresentation(imageTosave); 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory 
    NSString *dataPath = [documentsPath stringByAppendingPathComponent:@"/CapturesPhotos"]; 
    NSDate *date = [NSDate date]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    NSTimeZone *zone = [NSTimeZone localTimeZone]; 
    [formatter setTimeZone:zone]; 
    [formatter setDateFormat:@"yyyyMMddHHmmss"]; 
    NSString* namee = [NSString stringWithFormat:@"/IMG_%@.png",[formatter stringFromDate:date]]; 
    NSString *filePath = [dataPath stringByAppendingPathComponent:namee]; //Add the file name 
    [pngData writeToFile:filePath atomically:YES]; //Write the file 
} 
#pragma mark - UIImagePickerController Delegate Methods 
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)editingInfo { 

    NSLog(@"imagecontroller"); 
    // determine if the user selected or took a new photo 
    UIImage *selectedImage = [editingInfo valueForKey:UIImagePickerControllerOriginalImage]; 

    [self SavePhoto:selectedImage]; 

    // TODO: Do something with selectedImage (put it in a UIImageView 

    // dismiss the imagePicker 
    [picker.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 
} 
- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
#pragma mark - UIBarButton Selectors 
- (void)takePictureButtonPressed:(id)sender { 
    NSLog(@"takePictureButtonPressed..."); 
    [self.imagePickerController takePicture]; 
     // TODO: take picture! 
} 
- (void)startStopButtonPressed:(id)sender { 
    NSLog(@"startStopButtonPressed..."); 
    // TODO: make this do something 
} 
- (void)timedButtonPressed:(id)sender { 
    NSLog(@"timedButtonPressed..."); 
    // TODO: implement timer before calling takePictureButtonPressed 
} 
- (void)cancelButtonPressed:(id)sender { 
    NSLog(@"cancelButtonPressed"); 
    [self.navigationController dismissViewControllerAnimated:NO completion:nil]; 
    [self.navigationController popViewControllerAnimated:YES]; 
} 
@end 

當我按下按鈕從相機選取器功能不叫得到的圖像是爲什麼發生?! 我先按下連接到[self.imagePickerController takePicture]的按鈕,然後應該調用選取器,然後通過調用方法-(void)SavePhoto:(UIImage *) imageTosave保存圖片。

在此先感謝

+0

你可以發佈你的.h嗎? – Ilario

+0

我已經發布 – flashdisk

+0

是 - (void)takePictureButtonPressed:(id)發送者被調用? –

回答

0

確保您已經在類聲明中加入UIImagePickerControllerDelegate類別。

+0

我已經做到了! – flashdisk

0

按中的那個按鈕[self buttonPress:self];爲時尚早。

第一步:更改代碼以便編譯,更改imagePickerself.imagePickerController的所有內容。

第二步:註釋掉自己的buttonPress行。如果您想盡早觸發選取器,請執行viewDidAppear中的VC轉換。