mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Swift
		
	
    
 | 
						|
final class ScrollToBottomButton : UIView {
 | 
						|
    private weak var delegate: ScrollToBottomButtonDelegate?
 | 
						|
    
 | 
						|
    // MARK: Settings
 | 
						|
    private static let size: CGFloat = 40
 | 
						|
    private static let iconSize: CGFloat = 16
 | 
						|
    
 | 
						|
    // MARK: Lifecycle
 | 
						|
    init(delegate: ScrollToBottomButtonDelegate) {
 | 
						|
        self.delegate = delegate
 | 
						|
        super.init(frame: CGRect.zero)
 | 
						|
        setUpViewHierarchy()
 | 
						|
    }
 | 
						|
    
 | 
						|
    override init(frame: CGRect) {
 | 
						|
        preconditionFailure("Use init(delegate:) instead.")
 | 
						|
    }
 | 
						|
    
 | 
						|
    required init?(coder: NSCoder) {
 | 
						|
        preconditionFailure("Use init(delegate:) instead.")
 | 
						|
    }
 | 
						|
    
 | 
						|
    private func setUpViewHierarchy() {
 | 
						|
        // Background & blur
 | 
						|
        let backgroundView = UIView()
 | 
						|
        backgroundView.backgroundColor = isLightMode ? .white : .black
 | 
						|
        backgroundView.alpha = Values.lowOpacity
 | 
						|
        addSubview(backgroundView)
 | 
						|
        backgroundView.pin(to: self)
 | 
						|
        let blurView = UIVisualEffectView(effect: UIBlurEffect(style: .regular))
 | 
						|
        addSubview(blurView)
 | 
						|
        blurView.pin(to: self)
 | 
						|
        // Size & shape
 | 
						|
        let size = ScrollToBottomButton.size
 | 
						|
        set(.width, to: size)
 | 
						|
        set(.height, to: size)
 | 
						|
        layer.cornerRadius = size / 2
 | 
						|
        layer.masksToBounds = true
 | 
						|
        // Border
 | 
						|
        layer.borderWidth = Values.separatorThickness
 | 
						|
        let borderColor = (isLightMode ? UIColor.black : UIColor.white).withAlphaComponent(Values.veryLowOpacity)
 | 
						|
        layer.borderColor = borderColor.cgColor
 | 
						|
        // Icon
 | 
						|
        let tint = isLightMode ? UIColor.black : UIColor.white
 | 
						|
        let icon = UIImage(named: "ic_chevron_down")!.withTint(tint)
 | 
						|
        let iconImageView = UIImageView(image: icon)
 | 
						|
        iconImageView.set(.width, to: ScrollToBottomButton.iconSize)
 | 
						|
        iconImageView.set(.height, to: ScrollToBottomButton.iconSize)
 | 
						|
        iconImageView.contentMode = .scaleAspectFit
 | 
						|
        addSubview(iconImageView)
 | 
						|
        iconImageView.center(in: self)
 | 
						|
        // Gesture recognizer
 | 
						|
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap))
 | 
						|
        addGestureRecognizer(tapGestureRecognizer)
 | 
						|
    }
 | 
						|
    
 | 
						|
    // MARK: Interaction
 | 
						|
    @objc private func handleTap() {
 | 
						|
        delegate?.handleScrollToBottomButtonTapped()
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
protocol ScrollToBottomButtonDelegate : class {
 | 
						|
    
 | 
						|
    func handleScrollToBottomButtonTapped()
 | 
						|
}
 |