274 lines
12 KiB
Swift
274 lines
12 KiB
Swift
//
|
||
// ExamplesContainerController.swift
|
||
// ContainerController
|
||
//
|
||
// Created by Рустам Мотыгуллин on 31/05/2020.
|
||
// Copyright © 2020 mrusta. All rights reserved.
|
||
//
|
||
|
||
import UIKit
|
||
import ContainerControllerSwift
|
||
|
||
|
||
class ExamplesContainerController: ContainerController, ExampleCellDelegate {
|
||
|
||
// MARK: - Properties
|
||
|
||
var items: [TableAdapterItem] = []
|
||
|
||
// MARK: - Init
|
||
|
||
public init(addTo controller: UIViewController, style: ExamplesContainerController.ScrollType) {
|
||
|
||
let layout = ContainerLayout()
|
||
layout.startPosition = .hide
|
||
layout.backgroundShadowShow = false
|
||
layout.positions = ContainerPosition(top: 70, middle: 250, bottom: 70)
|
||
|
||
super.init(addTo: controller, layout: layout)
|
||
|
||
loadContainerView()
|
||
loadTableItems()
|
||
|
||
var scrollIndex: CGFloat = 0
|
||
switch style {
|
||
case .tableAdapterView: scrollIndex = 1
|
||
case .collectionAdapterView: scrollIndex = 2
|
||
case .collectionAdapterView2: scrollIndex = 3
|
||
case .textView: scrollIndex = 4
|
||
default: break
|
||
}
|
||
|
||
exampleCell( TableAdapterCell(), type: .scroll, value: scrollIndex, endEditing: true)
|
||
}
|
||
|
||
//MARK: - Load Container-View
|
||
|
||
func loadContainerView() {
|
||
|
||
view.backgroundColor = .white
|
||
view.cornerRadius = 15
|
||
view.addShadow()
|
||
}
|
||
|
||
//MARK: - Load Items
|
||
|
||
func loadTableItems() {
|
||
|
||
items = []
|
||
|
||
let h: CGFloat = 45
|
||
|
||
items = [
|
||
ExampleSegmentCellItem(height: h, delegate: self, type: .moveType, segmentItems: ["Top", "Middle", "Bottom", "Hide"]),
|
||
ExampleSegmentCellItem(height: h, delegate: self, type: .headerView, segmentItems: ["-", "Grip", "Label", "Details", "Search"]),
|
||
ExampleSegmentCellItem(height: h, delegate: self, type: .footerView, segmentItems: ["-", "Button", "TabBar"]),
|
||
ExampleSegmentCellItem(height: h, delegate: self, type: .color, segmentItems: ["-", ".white", ".red", ".green", ".blue"], index: 1),
|
||
ExampleSegmentCellItem(height: h, delegate: self, type: .blur, segmentItems: ["-", "Light", "ExtraLight", "Dark"]),
|
||
ExampleSegmentCellItem(height: h, delegate: self, type: .scroll, segmentItems: ["-", "Table", "Coll", "Coll2", "Text"]),
|
||
|
||
ExampleSwitchCellItem(height: h, delegate: self, type: .shadowBackground, value: false),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .shadowContainer, value: 0.2, maximumValue: 1.0),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .cornerRadius, value: 15, maximumValue: 140),
|
||
ExampleSwitchCellItem(height: h, delegate: self, type: .movingEnabled, value: true),
|
||
ExampleSwitchCellItem(height: h, delegate: self, type: .trackingPosition, value: false),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .footerPadding, value: 0, maximumValue: Float(ContainerDevice.screenMax)),
|
||
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .top, value: 70, maximumValue: 250),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .middle, value: 250, maximumValue: 500, minimumValue: 140),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .bottom, value: 70, maximumValue: 300),
|
||
ExampleSwitchCellItem(height: h, delegate: self, type: .middleEnable, value: true),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .insetsLeft, value: 0, maximumValue: Float(ContainerDevice.screenMin)),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .insetsRight, value: 0, maximumValue: Float(ContainerDevice.screenMin)),
|
||
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .landscapeTop, value: 20, maximumValue: 250),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .landscapeMiddle, value: 150, maximumValue: 300, minimumValue: 70),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .landscapeBottom, value: 70, maximumValue: 300),
|
||
ExampleSwitchCellItem(height: h, delegate: self, type: .landscapeMiddleEnable, value: false),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .landscapeInsetsLeft, value: 0, maximumValue: Float(ContainerDevice.screenMax)),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .landscapeInsetsRight, value: 0, maximumValue: Float(ContainerDevice.screenMax)),
|
||
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .scrollIndicatorInsetsTop, value: 0, maximumValue: 300),
|
||
ExampleSliderCellItem(height: h, delegate: self, type: .scrollIndicatorInsetsBottom, value: 0, maximumValue: 300),
|
||
|
||
]
|
||
}
|
||
|
||
// MARK: - Cell Delegate
|
||
|
||
func exampleCell(_ cell: TableAdapterCell, type: ExampleCell.Style, value: CGFloat, endEditing: Bool) {
|
||
|
||
// print("\(type) \(value) ")
|
||
let boolValue = (value == 1)
|
||
|
||
switch type {
|
||
case .top
|
||
, .middle
|
||
, .bottom
|
||
, .landscapeTop
|
||
, .landscapeMiddle
|
||
, .landscapeBottom
|
||
, .insetsLeft
|
||
, .insetsRight
|
||
, .landscapeInsetsLeft
|
||
, .landscapeInsetsRight:
|
||
if !endEditing { return }
|
||
default: break
|
||
}
|
||
|
||
switch type {
|
||
|
||
case .cornerRadius: self.view.cornerRadius = value
|
||
|
||
case .shadowContainer: self.view.addShadow(opacity: value)
|
||
|
||
case .movingEnabled: set(movingEnabled: boolValue)
|
||
|
||
case .trackingPosition: set(trackingPosition: boolValue)
|
||
|
||
case .footerPadding: set(footerPadding: value)
|
||
|
||
// MARK: ScrollInsets
|
||
|
||
case .scrollIndicatorInsetsTop: set(scrollIndicatorTop: value)
|
||
case .scrollIndicatorInsetsBottom: set(scrollIndicatorBottom: value)
|
||
|
||
// MARK: Positions
|
||
|
||
case .top: set(top: value); if ContainerDevice.isPortrait { move(type: .top) }
|
||
case .middle: set(middle: value); if ContainerDevice.isPortrait { move(type: .middle) }
|
||
case .bottom: set(bottom: value); if ContainerDevice.isPortrait { move(type: .bottom) }
|
||
|
||
case .landscapeTop: setLandscape(top: value); if !ContainerDevice.isPortrait { move(type: .top) }
|
||
case .landscapeMiddle: setLandscape(middle: value); if !ContainerDevice.isPortrait { move(type: .middle) }
|
||
case .landscapeBottom: setLandscape(bottom: value); if !ContainerDevice.isPortrait { move(type: .bottom) }
|
||
|
||
// MARK: MiddleEnable
|
||
|
||
case .middleEnable: set(middle: (boolValue ? 250 : nil))
|
||
|
||
case .landscapeMiddleEnable: setLandscape(middle: (boolValue ? 150 : nil))
|
||
|
||
|
||
// MARK: Background Shadow
|
||
|
||
case .shadowBackground: set(backgroundShadowShow: boolValue)
|
||
|
||
case .landscapeShadowBackground: setLandscape(backgroundShadowShow: boolValue)
|
||
|
||
// MARK: Insets
|
||
|
||
case .insetsLeft: set(left: value)
|
||
case .insetsRight: set(right: value)
|
||
|
||
case .landscapeInsetsLeft: setLandscape(left: value)
|
||
case .landscapeInsetsRight: setLandscape(right: value)
|
||
|
||
// MARK: MoveType
|
||
|
||
case .moveType:
|
||
|
||
switch value {
|
||
case 0: move(type: .top)
|
||
case 1: move(type: .middle)
|
||
case 2: move(type: .bottom)
|
||
default: move(type: .hide)
|
||
}
|
||
|
||
// MARK: ScrollViews
|
||
|
||
case .scroll:
|
||
|
||
switch value {
|
||
case 1: add(scrollView: createTableAdapterView(items: items, view: view))
|
||
case 2: add(scrollView: createMapsCollectionAdapterView())
|
||
case 3: add(scrollView: createCollectionAdapterView(width: view.width))
|
||
case 4: add(scrollView: createTextView())
|
||
default: removeScrollView()
|
||
}
|
||
|
||
|
||
// MARK: HeaderView
|
||
|
||
case .headerView:
|
||
switch value {
|
||
case 1:
|
||
let header = ExampleHeaderGripView()
|
||
header.height = 20
|
||
self.add(headerView: header)
|
||
case 2:
|
||
let header = MapsMenuHeader()
|
||
header.titleLabel.text = "Settings"
|
||
header.separatorView?.alpha = 1.0
|
||
self.add(headerView: header)
|
||
case 3:
|
||
let header = HeaderDetailsView()
|
||
header.titleLabel.text = "Title Header"
|
||
header.subtitle.text = "Subtitle"
|
||
header.textButton.setTitle("Button Text", for: .normal)
|
||
header.separatorView?.alpha = 1.0
|
||
self.add(headerView: header)
|
||
case 4:
|
||
let header = HeaderSearchBarView()
|
||
header.separatorView?.alpha = 1.0
|
||
self.add(headerView: header)
|
||
default:
|
||
self.removeHeaderView()
|
||
}
|
||
|
||
// MARK: FooterView
|
||
|
||
case .footerView:
|
||
switch value {
|
||
case 1:
|
||
let footer = ExampleFooterButtonView()
|
||
self.add(footerView: footer)
|
||
case 2:
|
||
let tabbar = HeaderTabBarView()
|
||
tabbar.height = (49.0 + ContainerDevice.isIphoneXBottom)
|
||
self.add(footerView: tabbar)
|
||
default:
|
||
self.removeFooterView()
|
||
}
|
||
|
||
// MARK: BackgroundColor
|
||
|
||
case .color:
|
||
self.view.removeBlur()
|
||
|
||
switch value {
|
||
case 0: view.backgroundColor = .clear
|
||
case 1: view.backgroundColor = .white
|
||
case 2: view.backgroundColor = .systemRed
|
||
case 3: view.backgroundColor = .systemGreen
|
||
case 4: view.backgroundColor = .systemBlue
|
||
default: break
|
||
}
|
||
|
||
|
||
// MARK: Blur
|
||
|
||
case .blur:
|
||
view.backgroundColor = .clear
|
||
|
||
switch value {
|
||
case 0: self.view.removeBlur()
|
||
case 1: self.view.addBlur(style: .light)
|
||
case 2: self.view.addBlur(style: .extraLight)
|
||
case 3: self.view.addBlur(style: .dark)
|
||
default: break
|
||
}
|
||
|
||
default: break
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|