79 lines
3.3 KiB
Swift
79 lines
3.3 KiB
Swift
// 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
|
|
}
|
|
}
|