12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- //
- // EditScanCornerView.swift
- // WeScan
- //
- // Created by Boris Emorine on 3/5/18.
- // Copyright © 2018 WeTransfer. All rights reserved.
- //
- import UIKit
- /// A UIView used by corners of a quadrilateral that is aware of its position.
- final class EditScanCornerView: UIView {
-
- let position: CornerPosition
-
- /// The image to display when the corner view is highlighted.
- private var image: UIImage?
- private(set) var isHighlighted = false
-
- lazy private var circleLayer: CAShapeLayer = {
- let layer = CAShapeLayer()
- layer.fillColor = UIColor.clear.cgColor
- layer.strokeColor = UIColor.white.cgColor
- layer.lineWidth = 1.0
- return layer
- }()
-
- init(frame: CGRect, position: CornerPosition) {
- self.position = position
- super.init(frame: frame)
- backgroundColor = UIColor.clear
- clipsToBounds = true
- layer.addSublayer(circleLayer)
- }
-
- required init?(coder aDecoder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- override func layoutSubviews() {
- super.layoutSubviews()
- layer.cornerRadius = bounds.width / 2.0
- }
-
- override func draw(_ rect: CGRect) {
- super.draw(rect)
-
- let bezierPath = UIBezierPath(ovalIn: rect.insetBy(dx: circleLayer.lineWidth, dy: circleLayer.lineWidth))
- circleLayer.frame = rect
- circleLayer.path = bezierPath.cgPath
-
- image?.draw(in: rect)
- }
-
- func highlightWithImage(_ image: UIImage) {
- isHighlighted = true
- self.image = image
- self.setNeedsDisplay()
- }
-
- func reset() {
- isHighlighted = false
- image = nil
- setNeedsDisplay()
- }
-
- }
|