35. open class PanelContentViewController: UIViewController {
...
open var preferredPanelContentSize: CGSize {
fatalError("Preferred panel content size not implemented")
}
...
}
v0.8
36. open class PanelContentViewController: UIViewController {
...
open var preferredPanelContentSize: CGSize {
fatalError("Preferred panel content size not implemented")
}
...
}
class FooPanelContentViewController: PanelContentViewController {
override var preferredPanelContentSize: CGSize {
return CGSize(width: 320, height: 500)
}
}
v0.8
37. open class PanelContentViewController: UIViewController {
...
open var preferredPanelContentSize: CGSize {
fatalError("Preferred panel content size not implemented")
}
...
}
class FooPanelContentViewController: PanelContentViewController {
override var preferredPanelContentSize: CGSize {
return CGSize(width: 320, height: 500)
}
}
Need to implement,
otherwise runtime crash!
v0.8
38. Why fatalError?
open class PanelContentViewController: UIViewController {
...
open var preferredPanelContentSize: CGSize {
fatalError("Preferred panel content size not implemented")
}
...
}
v0.8
39. Why fatalError?
Swift has no abstract modifier
open class PanelContentViewController: UIViewController {
...
open var preferredPanelContentSize: CGSize {
fatalError("Preferred panel content size not implemented")
}
...
}
v0.8
40. Why fatalError?
Swift has no abstract modifier
open class PanelContentViewController: UIViewController {
...
open var preferredPanelContentSize: CGSize {
fatalError("Preferred panel content size not implemented")
}
...
}
No default value
v0.8
44. open class PanelContentViewController: UIViewController {
...
open var preferredPanelContentSize: CGSize {
fatalError("Preferred panel content size not implemented")
}
...
}
Protocol-oriented
50. Protocol-oriented
public class PanelViewController: UIViewController,
UIAdaptivePresentationControllerDelegate {
public init(with contentViewController: UIViewController,
contentDelegate: PanelContentDelegate,
in panelManager: PanelManager) {
...
}
...
}
51. Protocol-oriented
public class PanelViewController: UIViewController,
UIAdaptivePresentationControllerDelegate {
public init(with contentViewController: UIViewController,
contentDelegate: PanelContentDelegate,
in panelManager: PanelManager) {
...
}
...
}
52. public protocol PanelManager {
/// The ```UIViewController``` that manages the panels and contains
/// ```panelContentWrapperView``` and ```panelContentView```.
var managerViewController: UIViewController { get }
/// The panels to be managed.
var panels: [PanelViewController] { get }
/// The view in which the panels may be dragged around.
var panelContentWrapperView: UIView { get }
/// The content view, which will be moved/resized when panels pin.
var panelContentView: UIView { get }
...
}
Protocol-oriented
53. public extension PanelManager where Self: UIViewController {
var managerViewController: UIViewController {
return self
}
}
Protocol-oriented
54. class ManagerViewController: UIViewController, PanelManager {
var panelContentWrapperView: UIView {
return contentWrapperView
}
var panelContentView: UIView {
return contentView
}
var panels: [PanelViewController] {
return [fooPanelVC, barPanelVC]
}
}
Protocol-oriented
102. – John Gruber, Daring Fireball
“It caught my eye a few weeks ago on Twitter,
and now that I can play with it in an actual
app, I’m even more impressed with the
ingenuity.”
103. – Federico Viticci, MacStories
“The best part, in my opinion, is that panels can
be converted back to sidebars by snapping them
to the edge of the display, which is a fantastic use
of the iPad Pro's large screen.”