Search code examples
objective-cxcodeapiuiimagepickercontroller

How to automatically take a picture without pressing the phototaken button on the imagepickercontroller?


In my project, I need to take pictures automatically every one minute. But I can't find out any solutions.

This is the code which I implemented but it doesn't work...

I used a NSTimer to call up the camera to take pictures every 4 sec. And I only need the takepic

//This method is all for the time setup. You can ignore it.

-(NSDate *)userInfo {

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm:ss"];

NSDate *date = [[[NSDate alloc]init]autorelease];

NSString *formattedDateString = [dateFormatter stringFromDate:date];

NSLog(@"formattedDateString: %@", formattedDateString);   

return date;    
}


- (void)targetMethod:(NSTimer *)theTimer {
   NSDate *startDate = [self userInfo];

   //newly changed lines.
   UIImagePickerController *myPicker;
   [myPicker takePicture];
   NSLog(@"Timer started on %@", startDate);

}


- (IBAction) showCameraUI {


   [NSTimer scheduledTimerWithTimeInterval:4.0
                                 target:self
                               selector: @selector(targetMethod:)
                               userInfo:[self userInfo]
                                repeats:YES];

}

Solution

  • Finally I figured out the solution.

    I use the

     AVCaptureVideoDataOutputSampleBufferDelegate
    

    to take pictures automatically.

    - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer   
       fromConnection:(AVCaptureConnection *)connection 
    

    It is pretty simple and thank you @sch all the same for your help :)