Я поигрался с идеей для кнопки, которая, когда удерживается, расширяется, чтобы показать другие кнопки (например, FAB в Android). Не отпуская, проведите пальцем вниз, чтобы выделить другие кнопки, похожие на поведение hapti c touch.
Вот грубый макет, который я создал с помощью Drama: https://youtu.be/Iam8Gjv3gqM.
Также должна быть возможность иметь метку горизонтально рядом с каждой кнопкой, и порядок кнопок должен быть таким, как показано (с выбранной кнопкой сверху вместо ее обычного положения).
У меня уже есть класс для каждой кнопки (см. Ниже), но я не знаю, как добиться этого макета / поведения.
class iDUButton: UIButton {
init(image: UIImage? = nil) {
super.init(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
if let image = image {
setImage(image, for: .normal)
}
backgroundColor = .secondarySystemFill
layer.cornerRadius = 15
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
}
class iDUBadgeButton: iDUButton {
var badgeLabel = UILabel()
var badgeCount = 0
override init(image: UIImage? = nil) {
super.init(image: image)
setup()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setup()
}
private func setup() {
badgeLabel.textColor = .white
badgeLabel.backgroundColor = .systemRed
badgeLabel.textAlignment = .center
badgeLabel.font = .preferredFont(forTextStyle: .caption1)
badgeLabel.alpha = 0
updateBadge()
addSubview(badgeLabel)
}
override func layoutSubviews() {
super.layoutSubviews()
badgeLabel.sizeToFit()
let height = max(18, badgeLabel.frame.height + 5.0)
let width = max(height, badgeLabel.frame.width + 10.0)
badgeLabel.frame = CGRect(x: frame.width - 5, y: -badgeLabel.frame.height / 2, width: width, height: height);
badgeLabel.layer.cornerRadius = badgeLabel.frame.height / 2;
badgeLabel.layer.masksToBounds = true;
}
func setBadgeCount(badgeCount: Int) {
self.badgeCount = badgeCount;
self.updateBadge()
}
func updateBadge() {
if badgeCount != 0 {
badgeLabel.text = "\(badgeCount)"
}
UIView.animate(withDuration: 0.25, animations: {
self.badgeLabel.alpha = self.badgeCount == 0 ? 0 : 1
})
layoutSubviews()
}
}
Если бы кто-нибудь мог помочь в достижении этого макета, я был бы очень благодарен! Заранее спасибо.
PS: Я разрабатываю пользовательский интерфейс в Swift, но по завершении буду преобразовывать его в Objective- C. Если вам интересно, используйте вариант для адаптации кнопки в верхнем левом углу this , чтобы предлагать выбор различных тегов.