Blame view
App/camera/ALCameraLib/Views/CropOverlay.swift
4.85 KB
|
1341bf603
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
//
// CropOverlay.swift
// ALCameraViewController
//
// Created by Alex Littlejohn on 2015/06/30.
// Copyright (c) 2015 zero. All rights reserved.
//
import UIKit
internal class CropOverlay: UIView {
var outerLines = [UIView]()
var horizontalLines = [UIView]()
var verticalLines = [UIView]()
var topLeftCornerLines = [UIView]()
var topRightCornerLines = [UIView]()
var bottomLeftCornerLines = [UIView]()
var bottomRightCornerLines = [UIView]()
let cornerDepth: CGFloat = 3
let cornerWidth: CGFloat = 20
let lineWidth: CGFloat = 1
internal init() {
super.init(frame: CGRect.zero)
createLines()
}
internal override init(frame: CGRect) {
super.init(frame: frame)
createLines()
}
internal required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
createLines()
}
override func layoutSubviews() {
for i in 0..<outerLines.count {
let line = outerLines[i]
var lineFrame: CGRect
switch (i) {
case 0:
lineFrame = CGRect(x: 0, y: 0, width: bounds.width, height: lineWidth)
break
case 1:
lineFrame = CGRect(x: bounds.width - lineWidth, y: 0, width: lineWidth, height: bounds.height)
break
case 2:
lineFrame = CGRect(x: 0, y: bounds.height - lineWidth, width: bounds.width, height: lineWidth)
break
case 3:
lineFrame = CGRect(x: 0, y: 0, width: lineWidth, height: bounds.height)
break
default:
lineFrame = CGRect.zero
break
}
line.frame = lineFrame
}
let corners = [topLeftCornerLines, topRightCornerLines, bottomLeftCornerLines, bottomRightCornerLines]
for i in 0..<corners.count {
let corner = corners[i]
var horizontalFrame: CGRect
var verticalFrame: CGRect
switch (i) {
case 0:
verticalFrame = CGRect(x: -cornerDepth, y: -cornerDepth, width: cornerDepth, height: cornerWidth)
horizontalFrame = CGRect(x: -cornerDepth, y: -cornerDepth, width: cornerWidth, height: cornerDepth)
break
case 1:
verticalFrame = CGRect(x: bounds.width, y: -cornerDepth, width: cornerDepth, height: cornerWidth)
horizontalFrame = CGRect(x: bounds.width + cornerDepth - cornerWidth, y: -cornerDepth, width: cornerWidth, height: cornerDepth)
break
case 2:
verticalFrame = CGRect(x: -cornerDepth, y: bounds.height + cornerDepth - cornerWidth, width: cornerDepth, height: cornerWidth)
horizontalFrame = CGRect(x: -cornerDepth, y: bounds.height, width: cornerWidth, height: cornerDepth)
break
case 3:
verticalFrame = CGRect(x: bounds.width, y: bounds.height + cornerDepth - cornerWidth, width: cornerDepth, height: cornerWidth)
horizontalFrame = CGRect(x: bounds.width + cornerDepth - cornerWidth, y: bounds.height, width: cornerWidth, height: cornerDepth)
break
default:
verticalFrame = CGRect.zero
horizontalFrame = CGRect.zero
break
}
corner[0].frame = verticalFrame
corner[1].frame = horizontalFrame
}
let lineThickness = lineWidth / UIScreen.main.scale
let padding = (bounds.height - (lineThickness * CGFloat(horizontalLines.count))) / CGFloat(horizontalLines.count + 1)
for i in 0..<horizontalLines.count {
let hLine = horizontalLines[i]
let vLine = verticalLines[i]
let spacing = (padding * CGFloat(i + 1)) + (lineThickness * CGFloat(i))
hLine.frame = CGRect(x: 0, y: spacing, width: bounds.width, height: lineThickness)
vLine.frame = CGRect(x: spacing, y: 0, width: lineThickness, height: bounds.height)
}
}
func createLines() {
outerLines = [createLine(), createLine(), createLine(), createLine()]
horizontalLines = [createLine(), createLine()]
verticalLines = [createLine(), createLine()]
topLeftCornerLines = [createLine(), createLine()]
topRightCornerLines = [createLine(), createLine()]
bottomLeftCornerLines = [createLine(), createLine()]
bottomRightCornerLines = [createLine(), createLine()]
isUserInteractionEnabled = false
}
func createLine() -> UIView {
let line = UIView()
line.backgroundColor = UIColor.white
addSubview(line)
return line
}
}
|