im тестирование простого кода. он использовал AVFoundation. когда я запускаю его. он может сделать снимок и сохранить его в альбоме. но когда я запускаю его дважды, он не работает. я перестроил его и снова работал. но только один раз. может кто-нибудь сказать мне, почему? (Мне очень жаль. Я не очень хорошо на английском ....> <)об AVFoundation: почему мое приложение только что сработало в первый раз
//
// main.m
// test
//
// Created by John Suu on 1/22/14.
// Copyright (c) 2014 John Suu. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "AVFoundation/AVFoundation.h"
AVCaptureSession *session;
AVCaptureDevice *videoDevice;
AVCaptureDeviceInput *videoInput;
AVCaptureStillImageOutput *stillImageOutput;
void settings(){
NSError *error = nil;
// 入力と出力からキャプチャーセッションを作成
session = [[AVCaptureSession alloc] init];
// 正面に配置されているカメラを取得
AVCaptureDevice *camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// カメラからの入力を作成し、セッションに追加
videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:camera error:&error];
[session addInput:videoInput];
// 画像への出力を作成し、セッションに追加
stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
[session addOutput:stillImageOutput];
// キャプチャーセッションから入力のプレビュー表示を作成
// セッション開始
[session startRunning];
}
void takePicture(){
AVCaptureConnection *videoConnection = [stillImageOutput connectionWithMediaType:AVMediaTypeVideo];
/*if (videoConnection == nil) {
return;
}*/
// ビデオ入力から画像を非同期で取得。ブロックで定義されている処理が呼び出され、画像データを引数から取得する
[stillImageOutput
captureStillImageAsynchronouslyFromConnection:videoConnection
completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (imageDataSampleBuffer == NULL) {
return;
}
// 入力された画像データからJPEGフォーマットとしてデータを取得
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
// JPEGデータからUIImageを作成
//[imageData writeToFile:@"/var/mobile" atomically:NO];
UIImage *image = [[UIImage alloc] initWithData:imageData];
// アルバムに画像を保存
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}];
}
int main(int argc, char * argv[])
{
settings();
takePicture();
// NSTimer *timer =
[NSTimer scheduledTimerWithTimeInterval:3 target:nil selector:nil userInfo:nil repeats:NO];
NSLog(@"runing.it works!\n");
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
Я сделал это, но не работал. – JohnSuu
и у меня есть другой вопрос. Я создаю приложение и запускаю его командой терминала ./test (бинарный файл приложения), это сообщение printf. но не делайте фото. Я не знаю, почему. Я написал приложение для местоположения. просто запущен таким же образом. оно работает. Должен ли я добавить что-то в свой info.plist? – JohnSuu