165 lines
4.3 KiB
Swift
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)
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|