// // 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() } }