WWCameraPickerController

Swift-5.6 iOS-14.0 TAG Swift Package Manager-SUCCESS LICENSE

Introduction - 简介

Installation with Swift Package Manager

dependencies: [
    .package(url: "https://github.com/William-Weng/WWCameraPickerController.git", .upToNextMajor(from: "1.0.0"))
]

Parameter - 可用参数

参数 说明
isRunning 相机预览是否在运作?

Function - 可用函数

函数 功能
defaultPosition(_:) 设定一开始启动的镜头位置
startRunning() 启动相机预览
stopRunning() 关闭相机预览
isRunning() 相机预览是否在运作?
capturePhoto() 执行拍照功能
startRecording(with:) 执行录影功能
stopRecording() 停止录影功能
switchCamera() 切换前后镜头
takePhoto(_:) 取得拍摄相片的相关资讯
takeMovie(_:) 取得录影的相关资讯
saveImage(_:result:) 储存图片到使用者相簿
previewLayerRateSetting(sessionPreset:videoGravity:) 改变输出画面的预设比例 / 画质
cameraZoomRange() 取得镜头的缩放范围
cameraZoom(with:factor:) 镜头缩放 (没有动态)
cameraZoomIn(with:) 镜头放大 (有动态)
cameraZoomOut(with:) 镜头缩小 (有动态)
cameraHDR(isEnable:) 启动HDR - High Dynamic Range Imaging
album(delegate:animated:completion:) 产生相簿ViewController
flashModeSetting(_:) 设定闪光灯模式
highResolutionSetting(_:) 设定使用高解析度模式
qualitySetting(_:) 设定拍照品质

Example

import UIKit
import WWPrint
import WWCameraPickerController

final class ViewController: UIViewController {
    
    @IBOutlet weak var zoomSlider: UISlider!
    
    private var cameraViewController: WWCameraViewController?
    private var zoomRate: CGFloat = 0.5
    
    override func viewDidLoad() {
        super.viewDidLoad()
        initSetting()
    }
        
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        prepareAction(for: segue, sender: sender)
    }
    
    @IBAction func startRunning(_ sender: UIButton) { cameraViewController?.startRunning() }
    @IBAction func stopRunning(_ sender: UIButton) { cameraViewController?.stopRunning() }
    @IBAction func capturePhoto(_ sender: UIButton) { cameraViewController?.capturePhoto() }
    @IBAction func flashModeSetting(_ sender: UIButton) { cameraViewController?.flashModeSetting(.on) }
    @IBAction func switchCamera(_ sender: UIButton) { _ = cameraViewController?.switchCamera() }
    @IBAction func previewLayerRateSetting(_ sender: UIButton) { cameraViewController?.previewLayerRateSetting(sessionPreset: .photo, videoGravity: .resizeAspect) }
    @IBAction func caremaZoomIn(_ sender: UIButton) { _ = cameraViewController?.cameraZoomIn(with: 0.5) }
    @IBAction func caremaZoomOut(_ sender: UIButton) { _ = cameraViewController?.cameraZoomOut(with: 0.5) }
    @IBAction func caremaZoom(_ sender: UISlider) { _ = cameraViewController?.cameraZoom(with: 0.5, factor: CGFloat(sender.value)) }
    @IBAction func userAlbum(_ sender: UIButton) { cameraViewController?.album() }
    @IBAction func cameraHDR(_ sender: UIButton) { _ = cameraViewController?.cameraHDR(isEnable: false) }
    @IBAction func startRecording(_ sender: UIButton) { cameraViewController?.startRecording(with: 3) }
    @IBAction func stopRecording(_ sender: UIButton) { cameraViewController?.stopRecording() }
}

private extension ViewController {
    
    func initSetting() {
        takePhotoAction()
        takeMovieAction()
    }
    
    func takePhotoAction() {
        
        guard let cameraViewController = cameraViewController else { return }
        
        cameraViewController.takePhoto({ result in
            
            switch result {
            case .failure(let error): wwPrint(error)
            case .success(let photo):
                
                cameraViewController.saveImage(photo._image(), result: { _result in
                    switch _result {
                    case .failure(let error): wwPrint(error)
                    case .success(let isSuccess): wwPrint(isSuccess)
                    }
                })
            }
        })
    }
    
    func takeMovieAction() {
        
        guard let cameraViewController = cameraViewController else { return }
        
        cameraViewController.takeMovie { result in
            switch result {
            case .failure(let error): wwPrint(error)
            case .success(let isSuccess): wwPrint(isSuccess)
            }
        }
    }
    
    func prepareAction(for segue: UIStoryboardSegue, sender: Any?) {
    
        guard let viewController = segue.destination as? WWCameraViewController,
              let zoomRange = viewController.cameraZoomRange()
        else {
            return
        }
        
        cameraViewController = viewController
        cameraViewController?.defaultPosition(.back)
        
        zoomSlider._setting(value: Float(zoomRange.min), max: Float(zoomRange.max), min: Float(zoomRange.min), isContinuous: true)
    }
}