import Foundation import UIKit import ComponentFlow import Display import ComponentDisplayAdapters public final class BlurredBackgroundComponent: Component { public let color: UIColor public let tintContainerView: UIView? public let cornerRadius: CGFloat public init( color: UIColor, tintContainerView: UIView? = nil, cornerRadius: CGFloat = 0.0 ) { self.color = color self.tintContainerView = tintContainerView self.cornerRadius = cornerRadius } public static func ==(lhs: BlurredBackgroundComponent, rhs: BlurredBackgroundComponent) -> Bool { if lhs.color != rhs.color { return false } if lhs.tintContainerView !== rhs.tintContainerView { return false } if lhs.cornerRadius != rhs.cornerRadius { return false } return true } public final class View: BlurredBackgroundView { private var tintContainerView: UIView? private var vibrancyEffectView: UIVisualEffectView? public func update(component: BlurredBackgroundComponent, availableSize: CGSize, transition: Transition) -> CGSize { /*if self.tintContainerView !== component.tintContainerView { if let tintContainerView = self.tintContainerView { self.tintContainerView = nil if tintContainerView.superview === self { tintContainerView.removeFromSuperview() } } self.tintContainerView = component.tintContainerView if let tintContainerView = self.tintContainerView { let vibrancyEffectView: UIVisualEffectView if let current = self.vibrancyEffectView { vibrancyEffectView = current } else { let blurEffect = UIBlurEffect(style: .extraLight) let vibrancyEffect = UIVibrancyEffect(blurEffect: blurEffect) vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect) self.vibrancyEffectView = vibrancyEffectView self.addSubview(vibrancyEffectView) } tintContainerView.backgroundColor = .white vibrancyEffectView.contentView.addSubview(tintContainerView) } else { if let vibrancyEffectView = self.vibrancyEffectView { self.vibrancyEffectView = nil vibrancyEffectView.removeFromSuperview() } } }*/ self.updateColor(color: component.color, transition: transition.containedViewLayoutTransition) /*if let _ = self.viewWithTag(123) { } else { let blurEffect = UIBlurEffect(style: .extraLight) /*let segmentedControl = UISegmentedControl(items: ["First Item", "Second Item"]) segmentedControl.sizeToFit() segmentedControl.center = CGPoint(x: 250.0, y: 250.0)*/ let testView = UIView(frame: CGRect(origin: CGPoint(x: 50.0, y: 100.0), size: CGSize(width: 250.0, height: 50.0))) testView.backgroundColor = .white let testView2 = UILabel() testView2.text = "Test 13245" testView2.font = Font.semibold(17.0) testView2.textColor = .black testView2.sizeToFit() testView2.center = CGPoint(x: 250.0 - testView.frame.minX, y: 490.0 - testView.frame.minY) let vibrancyEffect = UIVibrancyEffect(blurEffect: blurEffect) let vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect) //vibrancyEffectView.frame = CGRect(origin: CGPoint(), size: CGSize(width: 400.0, height: 300.0)) vibrancyEffectView.tag = 123 vibrancyEffectView.contentView.addSubview(testView) testView.addSubview(testView2) //vibrancyEffectView.contentView.addSubview(testView2) self.addSubview(vibrancyEffectView) /*let view = UIView() view.tag = 123 view.layer.compositingFilter = "sourceOverCompositing" view.backgroundColor = .white view.frame = CGRect(origin: CGPoint(), size: CGSize(width: 100.0, height: 200.0)) self.addSubview(view)*/ } if let view = self.viewWithTag(123) { view.frame = CGRect(origin: CGPoint(), size: availableSize) }*/ self.update(size: availableSize, cornerRadius: component.cornerRadius, transition: transition.containedViewLayoutTransition) if let tintContainerView = self.tintContainerView { transition.setFrame(view: tintContainerView, frame: CGRect(origin: CGPoint(), size: availableSize)) } if let vibrancyEffectView = self.vibrancyEffectView { transition.setFrame(view: vibrancyEffectView, frame: CGRect(origin: CGPoint(), size: availableSize)) } return availableSize } } public func makeView() -> View { return View(color: nil, enableBlur: true) } public func update(view: View, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: Transition) -> CGSize { return view.update(component: self, availableSize: availableSize, transition: transition) } }