//
|
// EKBackgroundView.swift
|
// SwiftEntryKit
|
//
|
// Created by Daniel Huri on 4/20/18.
|
// Copyright (c) 2018 huri000@gmail.com. All rights reserved.
|
//
|
|
import UIKit
|
|
final class EKBackgroundView: EKStyleView {
|
|
struct Style {
|
let background: EKAttributes.BackgroundStyle
|
let displayMode: EKAttributes.DisplayMode
|
}
|
|
// MARK: Props
|
private let visualEffectView: UIVisualEffectView
|
private let imageView: UIImageView
|
private let gradientView: GradientView
|
|
// MARK: Setup
|
init() {
|
imageView = UIImageView()
|
visualEffectView = UIVisualEffectView(effect: nil)
|
gradientView = GradientView()
|
super.init(frame: UIScreen.main.bounds)
|
|
addSubview(imageView)
|
imageView.contentMode = .scaleAspectFill
|
imageView.fillSuperview()
|
|
addSubview(visualEffectView)
|
visualEffectView.fillSuperview()
|
|
addSubview(gradientView)
|
gradientView.fillSuperview()
|
}
|
|
required init?(coder aDecoder: NSCoder) {
|
fatalError("init(coder:) has not been implemented")
|
}
|
|
// Background setter
|
var style: Style! {
|
didSet {
|
guard let style = style else {
|
return
|
}
|
var gradient: EKAttributes.BackgroundStyle.Gradient?
|
var backgroundEffect: UIBlurEffect?
|
var backgroundColor: UIColor = .clear
|
var backgroundImage: UIImage?
|
|
switch style.background {
|
case .color(color: let color):
|
backgroundColor = color.color(for: traitCollection,
|
mode: style.displayMode)
|
case .gradient(gradient: let value):
|
gradient = value
|
case .image(image: let image):
|
backgroundImage = image
|
case .visualEffect(style: let value):
|
backgroundEffect = value.blurEffect(for: traitCollection,
|
mode: style.displayMode)
|
case .clear:
|
break
|
}
|
|
gradientView.style = GradientView.Style(gradient: gradient,
|
displayMode: style.displayMode)
|
visualEffectView.effect = backgroundEffect
|
layer.backgroundColor = backgroundColor.cgColor
|
imageView.image = backgroundImage
|
}
|
}
|
|
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
guard let style = style else { return }
|
switch style.background {
|
case .color(color: let color):
|
layer.backgroundColor = color.color(for: traitCollection,
|
mode: style.displayMode).cgColor
|
case .visualEffect(style: let value):
|
visualEffectView.effect = value.blurEffect(for: traitCollection,
|
mode: style.displayMode)
|
default:
|
break
|
}
|
}
|
}
|