Skip to content

Instantly share code, notes, and snippets.

@arturdent
Created July 24, 2019 06:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arturdent/fd9c16ddeedd8fc36721dbc440e4a1d8 to your computer and use it in GitHub Desktop.
Save arturdent/fd9c16ddeedd8fc36721dbc440e4a1d8 to your computer and use it in GitHub Desktop.
prospal
import UIKit
import PlaygroundSupport
let view = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))
view.backgroundColor = #colorLiteral(red: 0.909803926944733, green: 0.47843137383461, blue: 0.643137276172638, alpha: 1.0)
PlaygroundPage.current.liveView = view
public class DecoratedButton: UIButton {
var radius: CGFloat = 50 {
didSet {
self.setupDecoratedLayers()
}
}
var lineWidth: CGFloat = 10 {
didSet {
self.setupDecoratedLayers()
}
}
override init(frame: CGRect) {
super.init(frame: frame)
setupDecoratedLayers()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupDecoratedLayers() {
layer.cornerRadius = radius
clipsToBounds = true
let path = UIBezierPath(roundedRect: self.bounds, cornerRadius: self.radius)
/// Right Bottom Corner
// *--*
// | |
// *--*
let AllCornersLayer = CALayer()
AllCornersLayer.frame = CGRect(origin: .zero, size: CGSize(width: self.frame.size.width, height: self.frame.size.height))
AllCornersLayer.backgroundColor = UIColor.yellow.cgColor
/// Left Corners
// *--.
// | |
// *--.
let leftCornersLayer = CALayer()
leftCornersLayer.frame = CGRect(origin: .zero, size: CGSize(width: (self.frame.size.width)/2.0, height: (self.frame.size.height)))
leftCornersLayer.backgroundColor = UIColor.red.cgColor
/// Top Corners
// *--*
// | |
// .--.
let TopCornerLayer = CALayer()
TopCornerLayer.frame = CGRect(origin: .zero, size: CGSize(width: (self.frame.size.width), height: (self.frame.size.height)/2.0))
TopCornerLayer.backgroundColor = UIColor.blue.cgColor
/// Left Top Corner
// *--.
// | |
// .--.
let leftTopCornerLayer = CALayer()
leftTopCornerLayer.frame = CGRect(origin: .zero, size: CGSize(width: (self.frame.size.width)/2.0, height: (self.frame.size.height)/2.0))
leftTopCornerLayer.backgroundColor = UIColor.green.cgColor
let layers = [AllCornersLayer, TopCornerLayer, leftCornersLayer, leftTopCornerLayer]
layers.map { layer in
let shape = CAShapeLayer()
shape.path = path.cgPath
shape.lineWidth = self.lineWidth
shape.strokeColor = UIColor.black.cgColor
shape.fillColor = UIColor.clear.cgColor
layer.mask = shape
self.layer.addSublayer(layer)
}
}
override public func layoutSubviews() {
super.layoutSubviews()
setupDecoratedLayers()
}
}
let button = DecoratedButton(frame: CGRect(x: 50, y: 100, width: 400, height: 100))
button.backgroundColor = #colorLiteral(red: 0.721568644046783, green: 0.886274516582489, blue: 0.592156887054443, alpha: 1.0)
view.addSubview(button)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment