mirror of https://github.com/oxen-io/session-ios
Add typing indicators in home view.
parent
b063a49d56
commit
50381cc94c
@ -0,0 +1,101 @@
|
||||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
@objc class TypingIndicatorView: UIStackView {
|
||||
private let kDotMaxHSpacing: CGFloat = 8
|
||||
|
||||
@objc
|
||||
public static let kMinRadiusPt: CGFloat = 6
|
||||
@objc
|
||||
public static let kMaxRadiusPt: CGFloat = 8
|
||||
|
||||
private let dot1 = DotView(dotType: .dotType1)
|
||||
private let dot2 = DotView(dotType: .dotType2)
|
||||
private let dot3 = DotView(dotType: .dotType3)
|
||||
|
||||
override public var isHidden: Bool {
|
||||
didSet {
|
||||
Logger.verbose("\(oldValue) -> \(isHidden)")
|
||||
}
|
||||
}
|
||||
|
||||
@available(*, unavailable, message:"use other constructor instead.")
|
||||
required init(coder aDecoder: NSCoder) {
|
||||
notImplemented()
|
||||
}
|
||||
|
||||
@available(*, unavailable, message:"use other constructor instead.")
|
||||
override init(frame: CGRect) {
|
||||
notImplemented()
|
||||
}
|
||||
|
||||
@objc
|
||||
public init() {
|
||||
super.init(frame: .zero)
|
||||
|
||||
// init(arrangedSubviews:...) is not a designated initializer.
|
||||
addArrangedSubview(dot1)
|
||||
addArrangedSubview(dot2)
|
||||
addArrangedSubview(dot3)
|
||||
|
||||
self.axis = .horizontal
|
||||
self.spacing = kDotMaxHSpacing
|
||||
self.alignment = .center
|
||||
}
|
||||
|
||||
@objc
|
||||
public func startAnimation() {
|
||||
}
|
||||
|
||||
@objc
|
||||
public func stopAnimation() {
|
||||
}
|
||||
|
||||
private enum DotType {
|
||||
case dotType1
|
||||
case dotType2
|
||||
case dotType3
|
||||
}
|
||||
|
||||
private class DotView: UIView {
|
||||
private let dotType: DotType
|
||||
|
||||
private let shapeLayer = CAShapeLayer()
|
||||
|
||||
@available(*, unavailable, message:"use other constructor instead.")
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
notImplemented()
|
||||
}
|
||||
|
||||
@available(*, unavailable, message:"use other constructor instead.")
|
||||
override init(frame: CGRect) {
|
||||
notImplemented()
|
||||
}
|
||||
|
||||
init(dotType: DotType) {
|
||||
self.dotType = dotType
|
||||
|
||||
super.init(frame: .zero)
|
||||
|
||||
autoSetDimension(.width, toSize: kMaxRadiusPt)
|
||||
autoSetDimension(.height, toSize: kMaxRadiusPt)
|
||||
|
||||
self.layer.addSublayer(shapeLayer)
|
||||
|
||||
updateLayer()
|
||||
// self.text = text
|
||||
//
|
||||
// setupSubviews()
|
||||
}
|
||||
|
||||
private func updateLayer() {
|
||||
shapeLayer.fillColor = UIColor.ows_signalBlue.cgColor
|
||||
|
||||
let margin = (TypingIndicatorView.kMaxRadiusPt - TypingIndicatorView.kMinRadiusPt) * 0.5
|
||||
let bezierPath = UIBezierPath(ovalIn: CGRect(x: margin, y: margin, width: TypingIndicatorView.kMinRadiusPt, height: TypingIndicatorView.kMinRadiusPt))
|
||||
shapeLayer.path = bezierPath.cgPath
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue