// Copyright 2018 the FloatingPanel authors. All rights reserved. MIT license. import UIKit import FloatingPanel /** - Attention: `FloatingPanelLayout` must not be applied by the parent view controller of a panel. But here `MainViewController` adopts it purposely to check if the library prints an appropriate warning. */ extension MainViewController: FloatingPanelLayout { var position: FloatingPanelPosition { .bottom } var initialState: FloatingPanelState { .half } var anchors: [FloatingPanelState: FloatingPanelLayoutAnchoring] { return [ .full: FloatingPanelLayoutAnchor(absoluteInset: UIScreen.main.bounds.height == 667.0 ? 18.0 : 16.0, edge: .top, referenceGuide: .safeArea), .half: FloatingPanelLayoutAnchor(absoluteInset: 262.0, edge: .bottom, referenceGuide: .safeArea), .tip: FloatingPanelLayoutAnchor(absoluteInset: 69.0, edge: .bottom, referenceGuide: .safeArea) ] } } class TopPositionedPanelLayout: FloatingPanelLayout { let position: FloatingPanelPosition = .top let initialState: FloatingPanelState = .full let anchors: [FloatingPanelState : FloatingPanelLayoutAnchoring] = [ .full: FloatingPanelLayoutAnchor(absoluteInset: 88.0, edge: .bottom, referenceGuide: .safeArea), .half: FloatingPanelLayoutAnchor(absoluteInset: 216.0, edge: .top, referenceGuide: .safeArea), .tip: FloatingPanelLayoutAnchor(absoluteInset: 44.0, edge: .top, referenceGuide: .safeArea) ] } class IntrinsicPanelLayout: FloatingPanelBottomLayout { override var initialState: FloatingPanelState { .full } override var anchors: [FloatingPanelState : FloatingPanelLayoutAnchoring] { return [ .full: FloatingPanelIntrinsicLayoutAnchor(fractionalOffset: 0.0, referenceGuide: .safeArea) ] } } class RemovablePanelLayout: FloatingPanelLayout { let position: FloatingPanelPosition = .bottom let initialState: FloatingPanelState = .half let anchors: [FloatingPanelState : FloatingPanelLayoutAnchoring] = [ .full: FloatingPanelIntrinsicLayoutAnchor(fractionalOffset: 0.0, referenceGuide: .safeArea), .half: FloatingPanelLayoutAnchor(absoluteInset: 130.0, edge: .bottom, referenceGuide: .safeArea) ] func backdropAlpha(for state: FloatingPanelState) -> CGFloat { return 0.3 } } class RemovablePanelLandscapeLayout: FloatingPanelLayout { let position: FloatingPanelPosition = .bottom let initialState: FloatingPanelState = .full let anchors: [FloatingPanelState : FloatingPanelLayoutAnchoring] = [ .full: FloatingPanelIntrinsicLayoutAnchor(fractionalOffset: 0.0, referenceGuide: .safeArea), .half: FloatingPanelLayoutAnchor(absoluteInset: 216.0, edge: .bottom, referenceGuide: .safeArea) ] func backdropAlpha(for state: FloatingPanelState) -> CGFloat { return 0.3 } } class ModalPanelLayout: FloatingPanelLayout { let position: FloatingPanelPosition = .bottom let initialState: FloatingPanelState = .full let anchors: [FloatingPanelState : FloatingPanelLayoutAnchoring] = [ .full: FloatingPanelIntrinsicLayoutAnchor(absoluteOffset: 0.0, referenceGuide: .safeArea), ] func backdropAlpha(for state: FloatingPanelState) -> CGFloat { return 0.3 } }