mirror of
https://github.com/metabolist/metatext
synced 2024-12-29 03:01:07 +01:00
84 lines
3.5 KiB
Swift
84 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)
|
|
])
|
|
}
|
|
}
|