zhihuitang
11/21/2017 - 9:15 AM

Round Image View

Round image view with shadow

//
//  RoundImageView.swift
//  Apollo
//
//  Created by Zhihui Tang on 2017-11-20.
//  Copyright © 2017 Zhihui Tang. All rights reserved.
//

import UIKit

@IBDesignable
class RoundImageView: UIView {
    @IBInspectable
    var image: UIImage? {
        didSet {
            imageView.image = image
        }
    }
    
    @IBInspectable
    var radius: CGFloat = 50.0 {
        didSet {
            outerView.layer.cornerRadius = radius
            outerView.layer.shadowPath = UIBezierPath(roundedRect: outerView.bounds, cornerRadius: radius).cgPath
            imageView.layer.cornerRadius = radius
        }
    }
    @IBInspectable
    var shadowRadius: CGFloat = 5.0 {
        didSet {
            outerView.layer.shadowRadius = shadowRadius
        }
    }
    
    @IBInspectable
    var shadowColor: UIColor = .black {
        didSet {
            outerView.layer.shadowColor = shadowColor.cgColor
        }
    }
    
    @IBInspectable
    var shadowOffset: CGSize = CGSize.zero {
        didSet {
            outerView.layer.shadowOffset = shadowOffset
        }
    }
    
    @IBInspectable
    var shadowOpacity: Float = 1 {
        didSet {
            outerView.layer.shadowOpacity = shadowOpacity
        }
    }
    
    
    
   
    @IBInspectable
    var borderWidth: CGFloat = 2.0 {
        didSet {
            outerView.layer.borderWidth = borderWidth
        }
    }
    @IBInspectable
    var borderColor: UIColor = .white {
        didSet {
            outerView.layer.borderColor = borderColor.cgColor
        }
    }
    @IBInspectable
    var bgColor: UIColor = .white {
        didSet {
            outerView.backgroundColor = bgColor
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }
    
    lazy private var outerView: UIView = {
        let view = UIView(frame: self.bounds)
        return view
        
    }()
    lazy private var imageView: UIImageView = {
        let view = UIImageView(frame: self.bounds)
        return view
    }()
    
    private func commonInit() {
        imageView.clipsToBounds = true
        outerView.clipsToBounds = false
        outerView.layer.shadowOpacity = shadowOpacity
        
        imageView.contentMode = .scaleAspectFit
        
        outerView.addSubview(imageView)
        self.addSubview(outerView)
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        outerView.frame = self.bounds
        imageView.frame = self.bounds
    }
    
}