initial
This commit is contained in:
165
Pods/ZLPhotoBrowser/Sources/General/ZLPhotoModel.swift
generated
Normal file
165
Pods/ZLPhotoBrowser/Sources/General/ZLPhotoModel.swift
generated
Normal file
@@ -0,0 +1,165 @@
|
||||
//
|
||||
// ZLPhotoModel.swift
|
||||
// ZLPhotoBrowser
|
||||
//
|
||||
// Created by long on 2020/8/11.
|
||||
//
|
||||
// Copyright (c) 2020 Long Zhang <495181165@qq.com>
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
import UIKit
|
||||
import Photos
|
||||
|
||||
public extension ZLPhotoModel {
|
||||
|
||||
enum MediaType: Int {
|
||||
case unknown = 0
|
||||
case image
|
||||
case gif
|
||||
case livePhoto
|
||||
case video
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class ZLPhotoModel: NSObject {
|
||||
|
||||
public let ident: String
|
||||
|
||||
public let asset: PHAsset
|
||||
|
||||
public var type: ZLPhotoModel.MediaType = .unknown
|
||||
|
||||
public var duration: String = ""
|
||||
|
||||
public var isSelected: Bool = false
|
||||
|
||||
private var pri_dataSize: ZLPhotoConfiguration.KBUnit?
|
||||
|
||||
public var dataSize: ZLPhotoConfiguration.KBUnit? {
|
||||
if let pri_dataSize = pri_dataSize {
|
||||
return pri_dataSize
|
||||
}
|
||||
|
||||
let size = ZLPhotoManager.fetchAssetSize(for: asset)
|
||||
pri_dataSize = size
|
||||
|
||||
return size
|
||||
}
|
||||
|
||||
private var pri_editImage: UIImage?
|
||||
|
||||
public var editImage: UIImage? {
|
||||
set {
|
||||
pri_editImage = newValue
|
||||
}
|
||||
get {
|
||||
if let _ = editImageModel {
|
||||
return pri_editImage
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public var second: ZLPhotoConfiguration.Second {
|
||||
guard type == .video else {
|
||||
return 0
|
||||
}
|
||||
return Int(round(asset.duration))
|
||||
}
|
||||
|
||||
public var whRatio: CGFloat {
|
||||
return CGFloat(asset.pixelWidth) / CGFloat(asset.pixelHeight)
|
||||
}
|
||||
|
||||
public var previewSize: CGSize {
|
||||
let scale: CGFloat = UIScreen.main.scale
|
||||
if whRatio > 1 {
|
||||
let h = min(UIScreen.main.bounds.height, ZLMaxImageWidth) * scale
|
||||
let w = h * whRatio
|
||||
return CGSize(width: w, height: h)
|
||||
} else {
|
||||
let w = min(UIScreen.main.bounds.width, ZLMaxImageWidth) * scale
|
||||
let h = w / whRatio
|
||||
return CGSize(width: w, height: h)
|
||||
}
|
||||
}
|
||||
|
||||
// Content of the last edit.
|
||||
public var editImageModel: ZLEditImageModel?
|
||||
|
||||
public init(asset: PHAsset) {
|
||||
ident = asset.localIdentifier
|
||||
self.asset = asset
|
||||
super.init()
|
||||
|
||||
type = transformAssetType(for: asset)
|
||||
if type == .video {
|
||||
duration = transformDuration(for: asset)
|
||||
}
|
||||
}
|
||||
|
||||
public func transformAssetType(for asset: PHAsset) -> ZLPhotoModel.MediaType {
|
||||
switch asset.mediaType {
|
||||
case .video:
|
||||
return .video
|
||||
case .image:
|
||||
if asset.zl.isGif {
|
||||
return .gif
|
||||
}
|
||||
if asset.mediaSubtypes.contains(.photoLive) {
|
||||
return .livePhoto
|
||||
}
|
||||
return .image
|
||||
default:
|
||||
return .unknown
|
||||
}
|
||||
}
|
||||
|
||||
public func transformDuration(for asset: PHAsset) -> String {
|
||||
let dur = Int(round(asset.duration))
|
||||
|
||||
switch dur {
|
||||
case 0..<60:
|
||||
return String(format: "00:%02d", dur)
|
||||
case 60..<3600:
|
||||
let m = dur / 60
|
||||
let s = dur % 60
|
||||
return String(format: "%02d:%02d", m, s)
|
||||
case 3600...:
|
||||
let h = dur / 3600
|
||||
let m = (dur % 3600) / 60
|
||||
let s = dur % 60
|
||||
return String(format: "%02d:%02d:%02d", h, m, s)
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public extension ZLPhotoModel {
|
||||
|
||||
static func ==(lhs: ZLPhotoModel, rhs: ZLPhotoModel) -> Bool {
|
||||
return lhs.ident == rhs.ident
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user