Files
OrderScheduling/Pods/SwiftEntryKit/Source/MessageViews/EKPopUpMessageView.swift
DDIsFriend f0e8a1709d initial
2023-08-18 17:28:57 +08:00

107 lines
3.6 KiB
Swift

//
// EKPopUpMessageView.swift
// SwiftEntryKit
//
// Created by Daniel Huri on 4/20/18.
// Copyright (c) 2018 huri000@gmail.com. All rights reserved.
//
import UIKit
final public class EKPopUpMessageView: UIView {
// MARK: - Properties
private var imageView: UIImageView!
private let titleLabel = UILabel()
private let descriptionLabel = UILabel()
private let actionButton = UIButton()
private let message: EKPopUpMessage
// MARK: - Setup
public init(with message: EKPopUpMessage) {
self.message = message
super.init(frame: UIScreen.main.bounds)
setupImageView()
setupTitleLabel()
setupDescriptionLabel()
setupActionButton()
setupInterfaceStyle()
}
public required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupImageView() {
guard let themeImage = message.themeImage else {
return
}
imageView = UIImageView()
addSubview(imageView)
imageView.layoutToSuperview(.centerX)
switch themeImage.position {
case .centerToTop(offset: let value):
imageView.layout(.centerY, to: .top, of: self, offset: value)
case .topToTop(offset: let value):
imageView.layoutToSuperview(.top, offset: value)
}
imageView.imageContent = themeImage.image
}
private func setupTitleLabel() {
addSubview(titleLabel)
titleLabel.content = message.title
titleLabel.layoutToSuperview(axis: .horizontally, offset: 30)
if let imageView = imageView {
titleLabel.layout(.top, to: .bottom, of: imageView, offset: 20)
} else {
titleLabel.layoutToSuperview(.top, offset: 20)
}
titleLabel.forceContentWrap(.vertically)
}
private func setupDescriptionLabel() {
addSubview(descriptionLabel)
descriptionLabel.content = message.description
descriptionLabel.layoutToSuperview(axis: .horizontally, offset: 30)
descriptionLabel.layout(.top, to: .bottom, of: titleLabel, offset: 16)
descriptionLabel.forceContentWrap(.vertically)
}
private func setupActionButton() {
addSubview(actionButton)
let height: CGFloat = 45
actionButton.set(.height, of: height)
actionButton.layout(.top, to: .bottom, of: descriptionLabel, offset: 30)
actionButton.layoutToSuperview(.bottom, offset: -30)
actionButton.layoutToSuperview(.centerX)
let buttonAttributes = message.button
actionButton.buttonContent = buttonAttributes
actionButton.contentEdgeInsets = UIEdgeInsets(top: 0, left: 30, bottom: 0, right: 30)
actionButton.layer.cornerRadius = height * 0.5
actionButton.addTarget(self, action: #selector(actionButtonPressed), for: .touchUpInside)
}
private func setupInterfaceStyle() {
titleLabel.textColor = message.title.style.color(for: traitCollection)
imageView?.tintColor = message.themeImage?.image.tintColor(for: traitCollection)
let tapColor = message.button.highlighedLabelColor(for: traitCollection)
actionButton.setTitleColor(tapColor, for: .highlighted)
actionButton.setTitleColor(tapColor, for: .selected)
}
public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
setupInterfaceStyle()
}
// MARK: - User Interaction
@objc func actionButtonPressed() {
message.action()
}
}