Files
ContainerController/Example/ContainerControllerSwift/Framework/Designable/DesignImageView.swift
T

165 lines
4.3 KiB
Swift

//
// DesignImageView.swift
// FigmaConvertXib
//
// Created by Рустам Мотыгуллин on 21.07.2020.
// Copyright © 2020 mrusta. All rights reserved.
//
import UIKit
@IBDesignable
class DesignImage: UIImageView {
@IBInspectable var cornerRadius: CGFloat = 0.0
/// Shadow
@IBInspectable var shColor: UIColor = .clear
@IBInspectable var shRadius: CGFloat = 0.0
@IBInspectable var shOffset: CGSize = .zero
/// Border
@IBInspectable var brColor: UIColor = .clear
@IBInspectable var brWidth: CGFloat = 0.0
override func draw(_ rect: CGRect) {
super.draw(rect)
layer.backgroundColor = UIColor.black.cgColor
let l = CALayer()
l.frame = rect
l.borderColor = brColor.cgColor
l.borderWidth = brWidth
l.cornerRadius = cornerRadius
layer.addSublayer(l)
add(shadow: shRadius, offset: shOffset, color: shColor)
add(border: brWidth, color: brColor)
}
}
@IBDesignable
class DesignImageView: UIView {
//MARK: Properties
@IBInspectable var image: UIImage?
@IBInspectable var contModeFill: Bool = false
/// Radius
@IBInspectable var cornerRadius: CGFloat = 0.0
/// Blur
@IBInspectable var blur: CGFloat = 0.0
/// Fill
@IBInspectable var fillColor: UIColor = .clear
/// Gradient
@IBInspectable var grColor2: UIColor?
@IBInspectable var grColor3: UIColor?
@IBInspectable var grColor4: UIColor?
@IBInspectable var grColor5: UIColor?
@IBInspectable var grColor6: UIColor?
@IBInspectable var grStartPoint: CGPoint = .zero
@IBInspectable var grEndPoint: CGPoint = .zero
/// Inner Shadow
@IBInspectable var inShColor: UIColor = .clear
@IBInspectable var inShRadius: CGFloat = 0.0
@IBInspectable var inShOffset: CGSize = .zero
/// Shadow
@IBInspectable var shColor: UIColor = .clear
@IBInspectable var shRadius: CGFloat = 0.0
@IBInspectable var shOffset: CGSize = .zero
/// Border
@IBInspectable var brColor: UIColor = .clear
@IBInspectable var brWidth: CGFloat = 0.0
var imageView: UIImageView!
//MARK: - Draw
override func draw(_ rect: CGRect) {
let radius = self.cornerRadius(cornerRadius)
layer.cornerRadius = radius
layer.backgroundColor = fillColor.cgColor
addShadow()
addBorder()
addImage()
addGradient()
addInnerShadow()
add(blur: blur) { [weak self] in
guard let _self = self else { return }
_self.imageView.setAlpha(.invisible)
}
}
private func addGradient() {
guard let glayer = add(gradient: fillColor,
color2: grColor2,
color3: grColor3,
color4: grColor4,
color5: grColor5,
color6: grColor6,
pointStart: grStartPoint,
pointEnd: grEndPoint,
cornerRadius: cornerRadius) else { return }
imageView.layer.insertSublayer(glayer, at: 0)
}
private func addInnerShadow() {
addInnerShadow(color: inShColor,
radius: inShRadius,
offset: inShOffset,
cornerRadius: cornerRadius)
}
private func addShadow() {
layer.shadowOffset = shOffset
layer.shadowOpacity = 1.0
layer.shadowRadius = shRadius
layer.shadowColor = shColor.cgColor
}
private func addBorder() {
layer.borderColor = brColor.cgColor
layer.borderWidth = brWidth
}
private func addImage() {
let f = CGRect(x: 0, y: 0, width: frame.width, height: frame.height)
imageView = UIImageView(frame: f)
imageView.image = image
imageView.contentMode = contModeFill ? .scaleAspectFill : .scaleAspectFit
imageView.clipsToBounds = true
imageView.layer.cornerRadius = self.cornerRadius(cornerRadius)
insertSubview(imageView, at: 0)
}
}