110 lines
3.2 KiB
Swift
110 lines
3.2 KiB
Swift
//
|
|
// ToolbarViewController.swift
|
|
// SBrowser
|
|
//
|
|
// Created by James Magahern on 7/23/20.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class ToolbarButtonView: UIView
|
|
{
|
|
private var buttonPadding = CGFloat(8.0)
|
|
private var buttonViews: [UIView] = []
|
|
|
|
func addButtonView(_ button: UIView) {
|
|
buttonViews.append(button)
|
|
addSubview(button)
|
|
setNeedsLayout()
|
|
}
|
|
|
|
override func sizeThatFits(_ size: CGSize) -> CGSize {
|
|
let width: CGFloat = buttonViews.reduce(0.0) { (result, button) -> CGFloat in
|
|
return result + button.sizeThatFits(size).width + buttonPadding
|
|
}
|
|
|
|
return CGSize(width: width, height: size.height)
|
|
}
|
|
|
|
override func layoutSubviews() {
|
|
var buttonRect = CGRect(origin: .zero, size: CGSize(width: 0, height: bounds.height))
|
|
buttonRect.origin.x = buttonPadding
|
|
|
|
for button in buttonViews {
|
|
let buttonSize = button.sizeThatFits(bounds.size)
|
|
buttonRect.size = CGSize(width: buttonSize.width, height: bounds.height)
|
|
button.frame = buttonRect
|
|
|
|
buttonRect.origin.x += buttonRect.width + buttonPadding
|
|
}
|
|
}
|
|
}
|
|
|
|
class ToolbarView: UIView
|
|
{
|
|
var urlBar: URLBar? { didSet { containerView.addSubview(urlBar!) } }
|
|
|
|
let containerView = UIView(frame: .zero)
|
|
let backgroundView = UIVisualEffectView(effect: UIBlurEffect(style: .systemThickMaterial))
|
|
let buttonsView = ToolbarButtonView(frame: .zero)
|
|
|
|
convenience init()
|
|
{
|
|
self.init(frame: .zero)
|
|
addSubview(backgroundView)
|
|
addSubview(containerView)
|
|
|
|
containerView.addSubview(buttonsView)
|
|
}
|
|
|
|
override func sizeThatFits(_ size: CGSize) -> CGSize
|
|
{
|
|
return CGSize(width: size.width, height: 44.0)
|
|
}
|
|
|
|
override func layoutSubviews()
|
|
{
|
|
super.layoutSubviews()
|
|
|
|
backgroundView.frame = bounds
|
|
|
|
var containerBounds = bounds
|
|
containerBounds.size.height -= safeAreaInsets.bottom
|
|
containerView.frame = containerBounds
|
|
containerView.frame = containerView.frame.insetBy(dx: 8.0, dy: 4.0)
|
|
|
|
let toolbarSize = buttonsView.sizeThatFits(containerView.bounds.size)
|
|
if let urlBar = urlBar {
|
|
urlBar.frame = CGRect(origin: .zero, size: CGSize(width: containerView.bounds.width - toolbarSize.width, height: toolbarSize.height))
|
|
}
|
|
|
|
buttonsView.frame = CGRect(origin: CGPoint(x: urlBar?.frame.maxX ?? 0 + 8.0, y: 0), size: toolbarSize)
|
|
}
|
|
}
|
|
|
|
class ToolbarViewController: UIViewController
|
|
{
|
|
let urlBar = URLBar()
|
|
let toolbarView = ToolbarView()
|
|
let scriptControllerIconView = ScriptControllerIconView()
|
|
let shareButton = UIButton(frame: .zero)
|
|
|
|
init() {
|
|
super.init(nibName: nil, bundle: nil)
|
|
|
|
toolbarView.urlBar = urlBar
|
|
|
|
shareButton.setImage(UIImage(systemName: "square.and.arrow.up"), for: .normal)
|
|
toolbarView.buttonsView.addButtonView(shareButton)
|
|
toolbarView.buttonsView.addButtonView(scriptControllerIconView)
|
|
}
|
|
|
|
override func loadView() {
|
|
self.view = toolbarView
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
}
|