Skip to content

Instantly share code, notes, and snippets.

View trilliwon's full-sized avatar
🎯
Focusing

WonJo trilliwon

🎯
Focusing
View GitHub Profile
import AVFoundation
class VideoTrimmer {
typealias TrimCompletion = (Error?) -> ()
typealias TrimPoints = [(CMTime, CMTime)]
func verifyPresetForAsset(preset: String, asset: AVAsset) -> Bool {
let compatiblePresets = AVAssetExportSession.exportPresets(compatibleWith: asset)
let filteredPresets = compatiblePresets.filter { $0 == preset }
return filteredPresets.count > 0 || preset == AVAssetExportPresetPassthrough
@trilliwon
trilliwon / imageOrientation.swift
Created October 23, 2019 04:00
UIDeviceOrientation to Image Orientation
extension UIDeviceOrientation {
var imageOrientation: UIImage.Orientation {
switch UIDevice.current.orientation {
case .landscapeLeft:
return UIImage.Orientation.right
case .landscapeRight:
return UIImage.Orientation.left
case .portrait:
return UIImage.Orientation.up
extension ViewController {
func creatingAnAssetObject(asset: AVAsset) {
let anAsset = asset
// anAsset.cancelLoading()
let keys = ["duration"]
anAsset.loadValuesAsynchronously(forKeys: keys) {
@trilliwon
trilliwon / CGAffineTransform.isPortrait.swift
Created October 21, 2019 05:44
CGAffineTransform.isPortrait.swift
extension CGAffineTransform {
// Check the video track's preferred transform to determine if it was recorded in portrait mode.
var isPortrait: Bool {
if self.a == 0 && self.d == 0 && (self.b == 1.0 || self.b == -1.0) && (self.c == 1.0 || self.c == -1.0) {
return true
}
return false
}
}
@trilliwon
trilliwon / AVPlayerSeekSmoothly.swift
Created October 17, 2019 06:46
AVPlayer Seek Smoothly
var isSeekInProgress = false
var chasingTime = CMTime.zero
func seekActually(time: CMTime) {
isSeekInProgress = true
playerView?.player.seek(to: time, toleranceBefore: CMTime.zero, toleranceAfter: CMTime.zero) { success in
if time == self.chasingTime {
self.isSeekInProgress = false
} else {
self.trySeekToChaseTime()
@trilliwon
trilliwon / CloseButton.swift
Created October 17, 2019 03:41
Swiftui Close button
func closeButton(reader: GeometryProxy) -> some View {
Button(action: {
self.selectedPoster = nil
}) {
Circle()
.strokeBorder(Color.red, lineWidth: 1)
.background(Image(systemName: "xmark").foregroundColor(.red))
.frame(width: 50, height: 50)
}
@trilliwon
trilliwon / PropertyWrapper.swift
Created October 14, 2019 07:13
UserDefault Swift Property Wrapper
@propertyWrapper
struct UserDefault<T> {
let key: String
let value: T
init(key: String, default value: T) {
self.key = key
self.value = value
}
@trilliwon
trilliwon / pagevc.swift
Last active September 14, 2019 15:13
pagevc delegate, datasource
extension HomeViewController: UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let index = mainViewControllers.firstIndex(of: viewController) else { return nil }
let prevIndex = index - 1
guard prevIndex >= 0, prevIndex < mainViewControllers.count else { return nil }
return mainViewControllers[prevIndex]
}
@trilliwon
trilliwon / code.swift
Created September 8, 2019 08:22
UITableView Hide Empty Cells
tableView.tableFooterView = UIView(frame: .zero)
@trilliwon
trilliwon / isPortrait.swift
Created August 29, 2019 04:57
AVAssetTrack.isPortrait
extension CGAffineTransform {
// Check the video track's preferred transform to determine if it was recorded in portrait mode.
var isPortrait: Bool {
if self.a == 0 && self.d == 0 && (self.b == 1.0 || self.b == -1.0) && (self.c == 1.0 || self.c == -1.0) {
return true
}
return false
}
}