VPCamera3/tdvideo/tdvideo/CCAddImage.swift
2024-03-05 11:44:34 +08:00

264 lines
8.9 KiB
Swift

//
// CCAddImage.swift
// SwiftProject
//
// Created by soldoros on 2024/1/10.
//
import UIKit
import Photos
import MobileCoreServices
/// 访
///
/// - formIpc: 访
/// - gallery: 访
/// - camer: 访
enum ImagePickerWayStyle {
case formIpc
case gallery
case camer
}
///
///
/// - image:
/// - video:
/// - all:
enum ImagePickerModelType {
case image
case video
case all
}
///
typealias AddImagePicekerBlock = (_ style:ImagePickerWayStyle,_ type:ImagePickerModelType,_ datas:Any) -> ()
class CCAddImage: NSObject ,UIImagePickerControllerDelegate,UINavigationControllerDelegate{
//访
var _wayStyle:ImagePickerWayStyle?
//
var _modelType:ImagePickerModelType?
//
var _controller:UIViewController?
//
var _imagePickerController:UIImagePickerController?
//block
var _pickerBlock:AddImagePicekerBlock?
/// Alert ( )
///
/// - Parameters:
/// - controller:
/// - modelType:
/// - pickerBlock:
public func getImagePicker(controller:UIViewController,modelType:ImagePickerModelType,pickerBlock:@escaping AddImagePicekerBlock){
// let alerts:NSArray = [[SSPickerWayGallery:""],[SSPickerWayCamer:""]]
// self .getImagePicker(controller: controller, alerts: alerts, modelType: modelType, pickerBlock: pickerBlock)
_controller = controller
_modelType = modelType
_pickerBlock = pickerBlock
self._wayStyle = ImagePickerWayStyle.camer
self.addImagePickerFromCamer(modelType: modelType)
}
// /// Alert ( ...)
// ///
// /// - Parameters:
// /// - controller:
// /// - alerts: Alert
// /// - modelType:
// /// - pickerBlock:
// public func getImagePicker(controller:UIViewController,alerts:NSArray,modelType:SSImagePickerModelType,pickerBlock:@escaping SSAddImagePicekerBlock){
//
// _controller = controller
// _modelType = modelType
// _pickerBlock = pickerBlock
//
// let alertController = UIAlertController.init(title: nil, message: nil, preferredStyle: UIAlertController.Style.actionSheet)
//
// for i:NSInteger in 0...alerts.count-1{
//
// let wayDic:NSDictionary = alerts[i] as! NSDictionary
// let wayKey:NSString = wayDic.allKeys[0] as! NSString
// let wayTitle:NSString = wayDic.value(forKey: wayKey as String) as! NSString
//
// let action = UIAlertAction.init(title: wayTitle as String, style: UIAlertAction.Style.default) { (UIAlertAction) in
//
// if(wayKey as String == SSPickerWayFormIpc){
// self._wayStyle = SSImagePickerWayStyle.SSImagePickerWayGallery
// self.addImagePickerFromIpc(modelType: modelType)
//
// }
// else if(wayKey as String == SSPickerWayGallery){
// self._wayStyle = SSImagePickerWayStyle.SSImagePickerWayGallery
// self.addImagePickerFromIpc(modelType: modelType)
// }
// else{
// self._wayStyle = SSImagePickerWayStyle.SSImagePickerWayCamer
// self.addImagePickerFromCamer(modelType: modelType)
// }
// }
//
// alertController.addAction(action)
// }
//
// alertController.addAction(UIAlertAction.init(title: "", style: UIAlertAction.Style.cancel, handler: nil))
// _controller?.present(alertController, animated: true, completion: nil)
//
// }
//
func addImagePickerFromCamer(modelType:ImagePickerModelType){
if(self.isCameraAvailable() == false){
print("没有摄像头")
return
}
_imagePickerController = UIImagePickerController()
_imagePickerController?.delegate = self
_imagePickerController!.modalTransitionStyle = UIModalTransitionStyle.flipHorizontal
//
_imagePickerController!.sourceType = UIImagePickerController.SourceType.camera;
//
_imagePickerController!.videoQuality = UIImagePickerController.QualityType.typeHigh;
//
_imagePickerController!.allowsEditing = true;
//
if(modelType == ImagePickerModelType.image){
_imagePickerController?.mediaTypes = [kUTTypeImage as String]
}
//
else if(modelType == ImagePickerModelType.video){
_imagePickerController?.mediaTypes = [kUTTypeMovie as String]
}
//
else{
_imagePickerController?.mediaTypes = [kUTTypeImage as String,kUTTypeMovie as String]
}
_imagePickerController?.modalPresentationStyle = UIModalPresentationStyle.overFullScreen
_controller?.present(_imagePickerController!, animated: true, completion: nil)
}
//
func addImagePickerFromIpc(modelType:ImagePickerModelType){
if(self.isPhotoLibraryAvailable() == false){
print("相册不可用")
return
}
_imagePickerController = UIImagePickerController()
_imagePickerController?.delegate = self
_imagePickerController!.modalTransitionStyle = UIModalTransitionStyle.flipHorizontal
_imagePickerController?.allowsEditing = true
//访
if(_wayStyle == ImagePickerWayStyle.formIpc){
_imagePickerController!.sourceType = UIImagePickerController.SourceType.photoLibrary;
}
//访
else{
_imagePickerController!.sourceType = UIImagePickerController.SourceType.savedPhotosAlbum;
}
//
if(modelType == ImagePickerModelType.image){
_imagePickerController?.mediaTypes = [kUTTypeImage as String]
}
//
else if(modelType == ImagePickerModelType.video){
_imagePickerController?.mediaTypes = [kUTTypeMovie as String]
}
//
else{
_imagePickerController?.mediaTypes = [kUTTypeImage as String,kUTTypeMovie as String]
}
_imagePickerController?.modalPresentationStyle = UIModalPresentationStyle.overFullScreen
_controller?.present(_imagePickerController!, animated: true, completion: nil)
}
//访
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let mediaType:NSString = info[UIImagePickerController.InfoKey.mediaType] as! NSString
//
if(mediaType as String == kUTTypeImage as String){
_modelType = ImagePickerModelType.image
self.saveImageAndUpdataHeader(image: info[UIImagePickerController.InfoKey.editedImage] as! UIImage)
}
//
else if(mediaType as String == kUTTypeMovie as String){
_modelType = ImagePickerModelType.video
let url:NSURL = info[UIImagePickerController.InfoKey.mediaURL] as! NSURL
let urlStr:NSString = url.path! as NSString
//簿
if(UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr as String)){
UISaveVideoAtPathToSavedPhotosAlbum(urlStr as String, self, #selector(didFinishSaveVideo(videoPath:)), nil)
}
}
picker.dismiss(animated: false, completion: nil)
}
//
func saveImageAndUpdataHeader(image:UIImage){
if(_pickerBlock != nil){
_pickerBlock!(_wayStyle!,_modelType!,image)
}
else{
_pickerBlock = nil
}
}
//
@objc func didFinishSaveVideo(videoPath:NSString){
print("视频保存成功")
if(_pickerBlock != nil){
_pickerBlock!(_wayStyle!,_modelType!,videoPath)
}
else{
_pickerBlock = nil
}
}
//
func isCameraAvailable()->Bool{
return UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera)
}
//
func isPhotoLibraryAvailable()->Bool{
return UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary)
}
}