ios 設(shè)置相機(jī)手動(dòng)對焦(滑塊調(diào)整焦距)

  • 最近在做畢設(shè)奏路,需要固定相機(jī)焦距,但是固定死了也不好斜脂,想著怎么自己去調(diào)整相機(jī)的焦距触机,翻了半天只發(fā)現(xiàn)AVCaptureDevice有設(shè)置焦距模式的玷或,可是沒看見調(diào)整焦距的呀庐椒?看起來有點(diǎn)關(guān)聯(lián)的adjustingFocus竟然是個(gè)BOOL型
    ??


    AVCaptureDevice Focus章節(jié)
  • 正準(zhǔn)備放棄在AVCaptureDevice類中找的時(shí)候在focusMode的枚舉定義里發(fā)現(xiàn)了這樣一個(gè)關(guān)鍵詞

focusMode枚舉
  • 英文太菜并不認(rèn)識這個(gè)詞,但是它說被鎖定在len`s當(dāng)前的位置犁钟,那肯定與這個(gè)len`s有關(guān)泼橘,查一查詞典是“鏡頭”的意思??炬灭。再翻一遍文檔發(fā)現(xiàn)了重點(diǎn):


    設(shè)置焦距的耶
  • 測試一把重归,搞定收工,代碼如下:


#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import <MobileCoreServices/MobileCoreServices.h>

#define XBScreenWidth   [UIScreen mainScreen].bounds.size.width
#define XBScreenHeight   [UIScreen mainScreen].bounds.size.height

@interface ViewController () <AVCaptureVideoDataOutputSampleBufferDelegate>

@property (strong, nonatomic) AVCaptureSession *avSession;
@property (strong, nonatomic) AVCaptureDevice *backCameraDevice;

@end

@implementation ViewController

- (void)viewDidLoad {
#if TARGET_OS_SIMULATOR
    NSAssert(0, @"請使用真機(jī)測試");
#endif
    [super viewDidLoad];
    [self setupSession];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    if (!_avSession.isRunning) {
        [_avSession startRunning];
    }
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    if (!_avSession.isRunning) {
        [_avSession stopRunning];
    }
}

- (AVCaptureDevice *)backCamera
{
    NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
    for (AVCaptureDevice *device in devices) {
        if (device.position == AVCaptureDevicePositionBack) {
            return device;
        }
    }
    return nil;
}

- (void)setupSession
{
    //創(chuàng)建session會話
    _avSession = [[AVCaptureSession alloc] init];
    [_avSession beginConfiguration];
    _avSession.sessionPreset = AVCaptureSessionPreset640x480;
    //通過capture對象創(chuàng)建輸入設(shè)備對象
    NSError *error = nil;
    _backCameraDevice = [self backCamera];
    [_backCameraDevice lockForConfiguration:&error];
    _backCameraDevice.focusMode = AVCaptureFocusModeLocked;
    [_backCameraDevice unlockForConfiguration];
    AVCaptureDeviceInput *inputDevice = [AVCaptureDeviceInput deviceInputWithDevice:_backCameraDevice error:&error];
    //將輸入設(shè)備添加到會話
    if ([_avSession canAddInput:inputDevice]) {
        [_avSession addInput:inputDevice];
    }else{
        NSLog(@"不能添加視頻輸入設(shè)備");
        return;
    }
    //添加一個(gè)輸出設(shè)備
    AVCaptureVideoDataOutput *videoOutput = [[AVCaptureVideoDataOutput alloc] init];
    videoOutput.videoSettings = @{(__bridge NSString *)kCVPixelBufferPixelFormatTypeKey : [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]};
    
    videoOutput.alwaysDiscardsLateVideoFrames = YES;
    
    if ([_avSession canAddOutput:videoOutput]) {
        [_avSession addOutput:videoOutput];
    }else{
        NSLog(@"不能添加視頻輸出設(shè)備");
        return;
    }
    
    AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:_avSession];
    //只有設(shè)置GravityResizeAspectFill或GravityResize椎木,然后設(shè)置frame才有效,圖像不會按照frame的大小顯示
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    previewLayer.frame = CGRectMake(0, 20, 320, 240);
    [self.view.layer addSublayer:previewLayer];

    [_avSession commitConfiguration];
}

#pragma mark -
#pragma mark IBAction

- (IBAction)foucsChange:(UISlider *)sender {
    
    NSError *error = nil;
    [_backCameraDevice lockForConfiguration:&error];
    [_backCameraDevice setFocusModeLockedWithLensPosition:sender.value completionHandler:nil];
    [_backCameraDevice unlockForConfiguration];
    
}

@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市畜伐,隨后出現(xiàn)的幾起案子烤礁,更是在濱河造成了極大的恐慌,老刑警劉巖勤众,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件们颜,死亡現(xiàn)場離奇詭異,居然都是意外死亡努溃,警方通過查閱死者的電腦和手機(jī)阻问,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門称近,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刨秆,你說我怎么就攤上這事衡未。” “怎么了如失?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵送粱,是天一觀的道長葫督。 經(jīng)常有香客問我,道長偎快,這世上最難降的妖魔是什么洽胶? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任姊氓,我火速辦了婚禮丐怯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘翔横。我一直安慰自己读跷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布禾唁。 她就那樣靜靜地躺著效览,像睡著了一般无切。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丐枉,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天哆键,我揣著相機(jī)與錄音,去河邊找鬼瘦锹。 笑死籍嘹,一個(gè)胖子當(dāng)著我的面吹牛弯院,可吹牛的內(nèi)容都是我干的噩峦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼抽兆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了族淮?” 一聲冷哼從身側(cè)響起辫红,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祝辣,沒想到半個(gè)月后贴妻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蝙斜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年名惩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孕荠。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡娩鹉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稚伍,到底是詐尸還是另有隱情弯予,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布个曙,位于F島的核電站锈嫩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏垦搬。R本人自食惡果不足惜呼寸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猴贰。 院中可真熱鬧对雪,春花似錦、人聲如沸米绕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蝶柿,卻和暖如春丈钙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背交汤。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工雏赦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芙扎。 一個(gè)月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓星岗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親戒洼。 傳聞我的和親對象是個(gè)殘疾皇子俏橘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容