【问题标题】:How to automatically take a picture without pressing the phototaken button on the imagepickercontroller?如何在不按imagepickercontroller上的拍照按钮的情况下自动拍照?
【发布时间】:2012-03-10 21:23:31
【问题描述】:

在我的项目中,我需要每隔一分钟自动拍照。但我找不到任何解决方案。

这是我实现的代码,但它不起作用...

我使用 NSTimer 每 4 秒调用一次相机拍照。我只需要拍摄照片

//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];

}

【问题讨论】:

    标签: objective-c xcode api uiimagepickercontroller


    【解决方案1】:

    您可以调用UIImagePickerController 的方法- (void)takePicture; 以编程方式拍照。例如,您可以使用计时器每隔一分钟调用一次。

    编辑

    您应该首先显示相机界面(更多信息here)。您可以在方法showCameraUI 中执行此操作。您还应该保留对创建的UIImagePickerController 的引用。

    - (IBAction) showCameraUI
    {
        UIImagePickerController *picker;
        // create and display picker
    
       self.imagePicker = imagePicker;
       [NSTimer scheduledTimerWithTimeInterval:4.0
                                 target:self
                               selector: @selector(targetMethod)
                               userInfo:nil
                                repeats:YES];
    }
    
    - (void)targetMethod
    {
        [self.picker takePicture];
        // ...
    }
    

    【讨论】:

    • 非常感谢您的帮助。但我不能让它成功运行。你能读一下我的台词并给我一些建议吗?我是 Objective-c 的新手,所以...
    • 你能描述一下你现在的行为吗? targetMethod: 被执行了吗?当您执行targetMethod: 时,您确定picker 不是nil
    • 我确信 targetMethod: 可以运行,因为如果我实现 UIImagePickerController 视图,它可以定期出现。但如果我只实现了
    • 验证很简单,在[picker takePicture];行下一个断点,看看调试器是否停在那里。还要检查选择器不是nil
    • 是的,我按照你说的做了,结果为零...然后我更改了代码,但程序在 [picker takePicture] 处收到了 EXC_BAD_ACCESS;
    【解决方案2】:

    我终于找到了解决办法。

    我用的是

     AVCaptureVideoDataOutputSampleBufferDelegate
    

    自动拍照。

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

    这很简单,非常感谢@sch 的帮助 :)

    【讨论】:

      【解决方案3】:

      可能有点晚了,但是 piker 函数有一个属性 takePicture

      double delayInSecondse = 3.0;
      dispatch_time_t epopTime = dispatch_time(DISPATCH_TIME_NOW, delayInSecondse * NSEC_PER_SEC);
      dispatch_after(epopTime, dispatch_get_main_queue(), ^(void){
        [picker takePicture];
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 2014-01-13
        • 1970-01-01
        • 2013-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多