metatext/Views/UIKit/NewStatusButtonView.swift
2021-01-31 06:52:20 -08:00

83 lines
3.5 KiB
Swift

// Copyright © 2021 Metabolist. All rights reserved.
import UIKit
final class NewStatusButtonView: UIView {
let button: UIButton
init(primaryAction: UIAction) {
button = UIButton(type: .custom, primaryAction: primaryAction)
super.init(frame: .zero)
initialSetup()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
private extension NewStatusButtonView {
// swiftlint:disable:next function_body_length
func initialSetup() {
let blurEffect = UIBlurEffect(style: .systemChromeMaterial)
let blurView = UIVisualEffectView(effect: blurEffect)
let vibrancyView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: blurEffect, style: .label))
backgroundColor = .clear
layer.cornerRadius = .newStatusButtonDimension / 2
layer.shadowPath = UIBezierPath(
ovalIn: .init(
origin: .zero,
size: .init(
width: .newStatusButtonDimension,
height: .newStatusButtonDimension)))
.cgPath
layer.shadowOffset = .zero
layer.shadowRadius = .defaultShadowRadius
layer.shadowOpacity = .defaultShadowOpacity
addSubview(blurView)
blurView.translatesAutoresizingMaskIntoConstraints = false
blurView.layer.cornerRadius = .newStatusButtonDimension / 2
blurView.clipsToBounds = true
blurView.contentView.addSubview(vibrancyView)
vibrancyView.translatesAutoresizingMaskIntoConstraints = false
let touchStartAction = UIAction { [weak self] _ in self?.alpha = 0.75 }
button.translatesAutoresizingMaskIntoConstraints = false
button.addAction(touchStartAction, for: .touchDown)
button.addAction(touchStartAction, for: .touchDragEnter)
let touchEndAction = UIAction { [weak self] _ in self?.alpha = 1 }
button.addAction(touchEndAction, for: .touchDragExit)
button.addAction(touchEndAction, for: .touchUpInside)
button.addAction(touchEndAction, for: .touchUpOutside)
button.addAction(touchEndAction, for: .touchCancel)
button.setImage(
UIImage(systemName: "pencil",
withConfiguration: UIImage.SymbolConfiguration(pointSize: .newStatusButtonDimension / 2)),
for: .normal)
vibrancyView.contentView.addSubview(button)
NSLayoutConstraint.activate([
blurView.leadingAnchor.constraint(equalTo: leadingAnchor),
blurView.topAnchor.constraint(equalTo: topAnchor),
blurView.trailingAnchor.constraint(equalTo: trailingAnchor),
blurView.bottomAnchor.constraint(equalTo: bottomAnchor),
vibrancyView.leadingAnchor.constraint(equalTo: blurView.contentView.leadingAnchor),
vibrancyView.topAnchor.constraint(equalTo: blurView.contentView.topAnchor),
vibrancyView.trailingAnchor.constraint(equalTo: blurView.contentView.trailingAnchor),
vibrancyView.bottomAnchor.constraint(equalTo: blurView.contentView.bottomAnchor),
button.leadingAnchor.constraint(equalTo: vibrancyView.contentView.leadingAnchor),
button.topAnchor.constraint(equalTo: vibrancyView.contentView.topAnchor),
button.trailingAnchor.constraint(equalTo: vibrancyView.contentView.trailingAnchor),
button.bottomAnchor.constraint(equalTo: vibrancyView.contentView.bottomAnchor)
])
}
}