// // UITableViewVibrantCell.swift // Pods // // Created by Jon Kent on 1/14/16. // // import UIKit open class UITableViewVibrantCell: UITableViewCell { fileprivate var vibrancyView:UIVisualEffectView = UIVisualEffectView() fileprivate var vibrancySelectedBackgroundView:UIVisualEffectView = UIVisualEffectView() fileprivate var defaultSelectedBackgroundView:UIView? open var blurEffectStyle: UIBlurEffectStyle? { didSet { updateBlur() } } // For registering with UITableView without subclassing otherwise dequeuing instance of the cell causes an exception public override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) } required public init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) vibrancyView.frame = bounds vibrancyView.autoresizingMask = [.flexibleHeight, .flexibleWidth] for view in subviews { vibrancyView.contentView.addSubview(view) } addSubview(vibrancyView) let blurSelectionEffect = UIBlurEffect(style: .light) vibrancySelectedBackgroundView.effect = blurSelectionEffect defaultSelectedBackgroundView = selectedBackgroundView updateBlur() } internal func updateBlur() { // shouldn't be needed but backgroundColor is set to white on iPad: backgroundColor = UIColor.clear if let blurEffectStyle = blurEffectStyle, !UIAccessibilityIsReduceTransparencyEnabled() { let blurEffect = UIBlurEffect(style: blurEffectStyle) vibrancyView.effect = UIVibrancyEffect(blurEffect: blurEffect) if selectedBackgroundView != nil && selectedBackgroundView != vibrancySelectedBackgroundView { vibrancySelectedBackgroundView.contentView.addSubview(selectedBackgroundView!) selectedBackgroundView = vibrancySelectedBackgroundView } } else { vibrancyView.effect = nil selectedBackgroundView = defaultSelectedBackgroundView } } }