Skip to content

Instantly share code, notes, and snippets.

View FlorianHardyDev's full-sized avatar

Florian Hardy FlorianHardyDev

View GitHub Profile
import AVKit
import Lottie
import UIKit
class FloatingButtonController: UIViewController {
// MARK: - Variables
private let window = FloatingButtonWindow()
private(set) var button: UIView!
private(set) var deleteView: UIView!
private(set) var insideView: UIView!
@FlorianHardyDev
FlorianHardyDev / FloatingButtonController_visibility.swift
Last active March 19, 2021 13:59
FloatingButtonController visibility
func removeWindow() {
window.windowLevel = UIWindow.Level(rawValue: -1)
window.isHidden = true
}
func showWindow() {
window.windowLevel = UIWindow.Level(rawValue: CGFloat.greatestFiniteMagnitude)
window.isHidden = false
}
@FlorianHardyDev
FlorianHardyDev / PlayerManager_Views.swift
Last active March 19, 2021 14:00
PlayerManager Views
// View components
var bigPlayerWindow: UIWindow?
var playerDetailViewController: PlayerDetailsViewController?
var floatingButtonController: FloatingButtonController?
var smallPlayerLastLocation: CGPoint?
private func setupSmallPlayer(with style: UIStatusBarStyle) {
if floatingButtonController == nil {
floatingButtonController = FloatingButtonController()
floatingButtonController?.floatingButtonDelegate = self
@FlorianHardyDev
FlorianHardyDev / FloatingButtonController_calculs.swift
Last active March 19, 2021 14:00
FloatingButtonController calculs
@objc
func panDidFire(panner: UIPanGestureRecognizer) {
let translation = panner.translation(in: view)
panner.setTranslation(CGPoint.zero, in: view)
if panner.state == .began {
// Animate the appearing of the delete button
UIView.animate(withDuration: Constants.animationDuration) {
self.showDeleteView()
}
@FlorianHardyDev
FlorianHardyDev / FloatingButtonController_variables_and_loadView.swift
Last active March 19, 2021 14:00
FloatingButtonController variables and loadView
// MARK: - Variables
private let window = FloatingButtonWindow()
private(set) var button: UIView!
private(set) var deleteView: UIView!
private(set) var insideView: UIView!
private(set) var assetView: AssetView!
private(set) var iconeView: UIImageView!
weak var floatingButtonDelegate: FloatingButtonDelegate?
var rotatingProgressBar = RotatingCircularGradientProgressBar()
var deletingPoint = CGPoint.zero
@FlorianHardyDev
FlorianHardyDev / FloatingButtonController_keyboardDidShow.swift
Last active March 19, 2021 14:00
FloatingButtonController keyboardDidShow
@objc
func keyboardDidShow(note: NSNotification) {
window.windowLevel = UIWindow.Level(rawValue: 0)
window.windowLevel = UIWindow.Level(rawValue: .greatestFiniteMagnitude)
}
@FlorianHardyDev
FlorianHardyDev / FloatingButtonController_init_deinit.swift
Last active March 19, 2021 14:00
FloatingButtonController init deinit
init() {
super.init(nibName: nil, bundle: nil)
window.windowLevel = UIWindow.Level(rawValue: CGFloat.greatestFiniteMagnitude)
window.isHidden = false
window.rootViewController = self
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardDidShow(note:)),
name: UIResponder.keyboardDidShowNotification,
object: nil)
PlayerManager.shared.addObserver(self)
@FlorianHardyDev
FlorianHardyDev / FloatingButtonDelegate.swift
Last active March 19, 2021 14:01
FloatingButtonDelegate
protocol FloatingButtonDelegate: AnyObject {
func onSmallPlayerTapped()
func closePodcastPlayer()
}
@FlorianHardyDev
FlorianHardyDev / FloatingButtonWindow.swift
Last active March 19, 2021 14:01
FloatingButtonWindow
private class FloatingButtonWindow: UIWindow {
var button: UIView?
init() {
super.init(frame: UIScreen.main.bounds)
backgroundColor = nil
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
@FlorianHardyDev
FlorianHardyDev / PlayerDetailsViewController_PodcastPlayerObserver.swift
Last active March 19, 2021 14:01
PlayerDetailsViewController PodcastPlayerObserver
extension PlayerDetailsViewController: PodcastPlayerObserver {
func podcastPlayer(_ player: AVPlayer?, didStartPlaying item: AVPlayerItem?) {
self.setPlayButton()
}
func podcastPlayer(_ player: AVPlayer?, didPausePlaybackOf item: AVPlayerItem?) {
self.setPlayButton()
}
func podcastPlayer(_ player: AVPlayer?, isLoading: Bool, item: AVPlayerItem?) {