An transitioning delegate for presenting and dismissing view controllers like AppleMusic player popover.
class ViewController: UIViewController {
lazy private var interactivePresentor = FAPopoverInteractiveTransition()
@objc func show(_ sender: Any?) {
let popover = PopoverViewController()
popover.modalPresentationStyle = .custom
popover.transitioningDelegate = self.interactivePresentor
self.present(popover, animated: true, completion: nil)
}
}class PopoverViewController: UIViewController {
weak var interactivePresentor: FAPopoverInteractiveTransition?
var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
self.scrollView = UIScrollView()
//...
// Enable dismiss interaction by your an scroll view
self.interactivePresentor?.scrollView = self.scrollView
// If needed
self.interactivePresentor?.delegate = self
}
}extension PopoverViewController: FAPopoverInteractiveTransitionDelegate {
func popoverInteractiveTransitionDidEndInteractive(_ interactiveTransition: FAPopoverInteractiveTransition) {
self.pullDownView?.active = true
}
func popoverInteractiveTransition(_ interactiveTransition: FAPopoverInteractiveTransition, didChangeFractionCompleted fractionCompleted: CGFloat) {
let active = !interactiveTransition.isInteractiveTransitionStarted || fractionCompleted == 0 || fractionCompleted == 1.0
self.pullDownView?.active = active
}
}Evgeny Bogomolov beastgrim@gmail.com
FAInteractivePopover is available under the MIT license. See the LICENSE file for more info.
