일반 UIImagePickerController를 사용하면
카메라에 접근할 수 있는 개체수가 한정되어 있다.
이로 인해 좀 더 깊게 접근 하려면 AVcaptureSession을 사용해야 한다.
UIImagePicker와는 다르게 CameraDevice에 접근하려면 device를 받아와 설정해줘야 한다.
1. flash
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice"); //디바이스 받아옴
if (captureDeviceClass != nil) //디바이스를 제대로 가져온 경우에만 동작
{
if ([_videoDevice hasFlash]) //단말이 플래시를 가진 경우에만 실행
{
NSError *error = nil;
[_videoDevice lockForConfiguration:&error]; //device에 설정권한 요청
if (flashOn)
{
[_videoDevice setFlashMode:AVCaptureFlashModeOn]; //플래시 on
}
else
{
[_videoDevice setFlashMode:AVCaptureFlashModeOff]; //플래시 off
}
[_videoDevice unlockForConfiguration]; //설정 권한 반환
if (error) //에러 출력
{
NSLog(@"Cannot flash on with error : %@", [error localizedDescription]);
}
}
}
위 에서 flashOn은 스위치를 통해 flash를 킬지 말지 결정하기 위한 bool변수이다.
실제로 중요한 부분은 주석으로 표시해 두었으니 필요한 부분만 참조하여 사용
2. focus
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
[device lockForConfiguration:&error];
[device setFocusPointOfInterest:CGPointMake(0.5, 0.388)]; //화면 전체를 1로 잡아서 x,y 위치
//0, 0 이면 화면 좌측 상단, 1,1이면 화면 우측 하단, 0.5, 0.5면 화면 중앙
[device setFocusMode:AVCaptureFocusModeContinuousAutoFocus]; //autofocus, on, off가 있음
[device unlockForConfiguration];
if (error) //에러 출력
{
LogDebug(@"Camera focus mode change failed.");
}
flash와 같이 권한 요청하여 바꿀 수 있다.
포커스의 위치를 임의로 지정하여 포커스 시킬 수도 있다.
'프로그래밍 > iOS' 카테고리의 다른 글
[ios] non-arc환경으로 작성된 코드 적용하기, 반대의 경우도 (0) | 2015.04.08 |
---|---|
[ios] Orientation (0) | 2015.04.08 |
[ios] NSString에서 숫자만 추출하기 (0) | 2015.04.08 |
[ios] 아이폰 연락처 동기화 (0) | 2015.04.08 |
[ios] alert show에서 죽을때 (0) | 2015.04.08 |