session-ios/Session/Conversations/Views & Cells/VoiceNoteLock.swift

81 lines
2.7 KiB
Swift

//
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
//
import Foundation
@objc
public class VoiceMemoLockView: UIView {
private var offsetConstraint: NSLayoutConstraint!
private let offsetFromToolbar: CGFloat = 40
private let backgroundViewInitialHeight: CGFloat = 80
private var chevronTravel: CGFloat {
return -1 * (backgroundViewInitialHeight - 50)
}
@objc
public override init(frame: CGRect) {
super.init(frame: frame)
addSubview(backgroundView)
backgroundView.addSubview(lockIconView)
backgroundView.addSubview(chevronView)
layoutMargins = UIEdgeInsets(top: 0, leading: 0, bottom: offsetFromToolbar, trailing: 0)
backgroundView.autoPinEdges(toSuperviewMarginsExcludingEdge: .bottom)
self.offsetConstraint = backgroundView.autoPinEdge(toSuperviewMargin: .bottom)
// we anchor the top so that the bottom "slides up" to meet it as the user slides the lock
backgroundView.autoPinEdge(.top, to: .bottom, of: self, withOffset: -offsetFromToolbar - backgroundViewInitialHeight)
backgroundView.layoutMargins = UIEdgeInsets(top: 6, leading: 6, bottom: 6, trailing: 6)
lockIconView.autoPinEdges(toSuperviewMarginsExcludingEdge: .bottom)
chevronView.autoPinEdges(toSuperviewMarginsExcludingEdge: .top)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: -
@objc
public func update(ratioComplete: CGFloat) {
offsetConstraint.constant = CGFloatLerp(0, chevronTravel, ratioComplete)
}
// MARK: - Subviews
private lazy var lockIconView: UIImageView = {
let imageTemplate = #imageLiteral(resourceName: "ic_lock_outline").withRenderingMode(.alwaysTemplate)
let imageView = UIImageView(image: imageTemplate)
imageView.tintColor = Colors.destructive
imageView.autoSetDimensions(to: CGSize(width: 24, height: 24))
return imageView
}()
private lazy var chevronView: UIView = {
let label = UILabel()
label.text = "\u{2303}"
label.textColor = Colors.destructive
label.textAlignment = .center
return label
}()
private lazy var backgroundView: UIView = {
let view = UIView()
let width: CGFloat = 36
view.autoSetDimension(.width, toSize: width)
view.backgroundColor = Colors.composeViewBackground
view.layer.cornerRadius = width / 2
view.layer.borderColor = Colors.text.withAlphaComponent(Values.lowOpacity).cgColor
view.layer.borderWidth = Values.composeViewTextFieldBorderThickness
return view
}()
}