【问题标题】:Take photo programmatically using a timer使用计时器以编程方式拍照
【发布时间】:2012-09-23 10:57:16
【问题描述】:

我正在寻找一种在 Objective-C 中通过代码和使用计时器的图像显示器制作照片的方法。

我的意思是:我想要一个类似于标准照片应用程序的界面,但不能在按下按钮后拍照,但按钮必须启动一个计时器(从计时器我会检查其他值)。

我们举个例子:

  • 我按下按钮

  • 计时器开始

  • 检查值 1-2 秒后,照片被拍摄

  • 照片会自动保存在照片库中。

  • 应用程序已准备好制作其他照片

但我不知道如何开始。我看到了调用照片应用程序的代码示例,但没有任何东西可以从代码中实现,尽管我看到许多应用程序都这样做。当照片被拍摄时,它应该被简单地保存。

我该怎么做?

【问题讨论】:

  • 那么基本上你是想实现一个带倒计时功能的拍照应用?
  • 我想检查值以进行验证,如果结果为真,则拍摄照片,如果不是,则计时器重新开始,显然它将包括一个取消按钮。无论如何,我不认为这个内部代码对你帮助我很重要。
  • 我正在阅读手册,我正在尝试 2-3 周,但我不是这些事件和框架方面的专家。

标签: iphone objective-c timer photo


【解决方案1】:

使用UIImagePickerController 显示默认的摄像头GUI。

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls = NO;

您可以通过将showsCameraControls 设置为NO 来隐藏默认的相机控件。然后您可以通过创建UIView、添加您的控件并将cameraOverlayView 设置到该视图来定义您自己的控件。

UIView *cameraControlsView = [[UIView alloc] initWithFrame:controlsFrame];
UIButton *captureButton = [[UIButton alloc] initWithFrame:buttonFrame];
[captureButton setTitle:@"Capture" forState:UIControlStateNormal];
[captureButton addTarget:self action:@selector(buttonPressed:)        
        forControlEvents:UIControlEventTouchUpInside];
[cameraControlsView addSubview:captureButton];
picker.cameraOverlayView = cameraControlsView;

当用户点击您的自定义捕获UIButton 时,您可以启动计时器。当计时器触发时,您进行验证并使用takePicture 方法捕获图像。

- (void)buttonPressed:(id)sender {
    [NSTimer scheduledTimerWithTimeInterval:3.0f target:self 
     selector:@selector(timerFired:) userInfo:nil repeats:NO];
}

- (void)timerFired:(NSTimer *)timer {
    if (whateverIsOk) {
        [self.picker takePicture];
    )
}

【讨论】:

  • 伙计,感谢您的帮助,但我在应用它时遇到了一些困难,有一个警告,计时器从未使用过,当我按下按钮时没有任何反应。
  • 什么警告?您是否成功创建了 GUI 和按钮?这不是复制粘贴解决方案,我只是在这里输入了这个,没有检查可能的错误。
  • 我创建了 GUI 和按钮,但是当我按下它时没有任何反应,并且警告是“未使用的变量计时器”,在您的事件中 - (void)timerFired:(NSTimer *)timer跨度>
  • 我的错,您不需要将其保存到变量中。你确定定时器什么都不做? timerFired: 被执行了吗?
  • 我尝试只执行 [self.picker takePicture];回避这个问题,但没有线索,它不起作用。 .m 文件代码pastebin.com/qLhyu0Wj .h 文件代码pastebin.com/d1T1FAGR
【解决方案2】:

UIImagePickerController 类中有一个方法可以编程拍照

-(void)takePicure

要将图像保存到照片库,您有两种选择

  1. 使用 ALAssetLibrary

    ALAssetsLibrary *al = [[ALAssetsLibrary alloc] init]; [al writeImageDataToSavedPhotosAlbum:user.photo.image metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { }];

  2. void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);

【讨论】:

  • 我认为takePicture 已经保存到照片库了,不是吗?
  • 我不这么认为。我会检查
猜你喜欢
  • 1970-01-01
  • 2010-12-11
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多