Files

165 lines
4.3 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// 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)
}
}