77 lines
1.9 KiB
Swift
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()
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|