mastodon-app-ufficiale-ipho.../MastodonSDK/Sources/MastodonUI/View/Button/HUDButton.swift

77 lines
2.5 KiB
Swift

//
// HUDButton.swift
// Mastodon
//
// Created by Jed Fox on 2022-11-24.
//
import UIKit
public class HUDButton: UIView {
public static let height: CGFloat = 30
let background: UIVisualEffectView = {
let backgroundView = UIVisualEffectView(effect: UIBlurEffect(style: .systemMaterial))
backgroundView.layer.masksToBounds = true
backgroundView.layer.cornerRadius = HUDButton.height * 0.5
return backgroundView
}()
let vibrancyView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: UIBlurEffect(style: .systemMaterial)))
public let button: UIButton = {
let button = HighlightDimmableButton()
button.expandEdgeInsets = .constant(-10)
button.contentEdgeInsets = .constant(7)
button.imageView?.tintColor = .label
button.titleLabel?.font = UIFontMetrics(forTextStyle: .body).scaledFont(for: .systemFont(ofSize: 15, weight: .bold))
return button
}()
public init(configure: (UIButton) -> Void) {
super.init(frame: .zero)
configure(button)
_init()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
_init()
}
func _init() {
translatesAutoresizingMaskIntoConstraints = false
background.translatesAutoresizingMaskIntoConstraints = false
addSubview(background)
background.pinToParent()
vibrancyView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
background.contentView.addSubview(vibrancyView)
button.translatesAutoresizingMaskIntoConstraints = false
vibrancyView.contentView.addSubview(button)
button.pinToParent()
NSLayoutConstraint.activate([
heightAnchor.constraint(equalToConstant: HUDButton.height).priority(.defaultHigh),
])
}
public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
button.titleLabel?.font = UIFontMetrics(forTextStyle: .body).scaledFont(for: .systemFont(ofSize: 15, weight: .bold))
}
public override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
button.point(inside: button.convert(point, from: self), with: event)
}
public override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if self.point(inside: point, with: event) {
return button
} else {
return nil
}
}
}