mastodon-ios/Mastodon/Scene/Share/View/Control/AdaptiveUserInterfaceStyleB...

77 lines
1.9 KiB
Swift

//
// AdaptiveUserInterfaceStyleBarButtonItem.swift
// Mastodon
//
// Created by MainasuK Cirno on 2021-4-13.
//
import UIKit
final class AdaptiveUserInterfaceStyleBarButtonItem: UIBarButtonItem {
let button = AdaptiveCustomButton()
init(lightImage: UIImage, darkImage: UIImage) {
super.init()
button.setImage(light: lightImage, dark: darkImage)
self.customView = button
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
}
extension AdaptiveUserInterfaceStyleBarButtonItem {
class AdaptiveCustomButton: UIButton {
var lightImage: UIImage?
var darkImage: UIImage?
override init(frame: CGRect) {
super.init(frame: frame)
_init()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
_init()
}
private func _init() {
adjustsImageWhenHighlighted = false
}
override var isHighlighted: Bool {
didSet {
alpha = isHighlighted ? 0.6 : 1
}
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
resetImage()
}
func setImage(light: UIImage, dark: UIImage) {
lightImage = light
darkImage = dark
resetImage()
}
private func resetImage() {
switch traitCollection.userInterfaceStyle {
case .light:
setImage(lightImage, for: .normal)
case .dark,
.unspecified:
setImage(darkImage, for: .normal)
@unknown default:
assertionFailure()
}
}
}
}