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.
		
		
		
		
		
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Swift
		
	
| 
 | |
| final class MediaLoaderView : UIView {
 | |
|     private let bar = UIView()
 | |
|     
 | |
|     private lazy var barLeftConstraint = bar.pin(.left, to: .left, of: self)
 | |
|     private lazy var barRightConstraint = bar.pin(.right, to: .right, of: self)
 | |
|     
 | |
|     // MARK: Lifecycle
 | |
|     override init(frame: CGRect) {
 | |
|         super.init(frame: frame)
 | |
|         setUpViewHierarchy()
 | |
|     }
 | |
|     
 | |
|     required init?(coder: NSCoder) {
 | |
|         super.init(coder: coder)
 | |
|         setUpViewHierarchy()
 | |
|     }
 | |
|     
 | |
|     private func setUpViewHierarchy() {
 | |
|         bar.backgroundColor = Colors.accent
 | |
|         bar.set(.height, to: 8)
 | |
|         addSubview(bar)
 | |
|         barLeftConstraint.isActive = true
 | |
|         bar.pin(.top, to: .top, of: self)
 | |
|         barRightConstraint.isActive = true
 | |
|         bar.pin(.bottom, to: .bottom, of: self)
 | |
|         step1()
 | |
|     }
 | |
|     
 | |
|     // MARK: Animation
 | |
|     func step1() {
 | |
|         barRightConstraint.constant = -bounds.width
 | |
|         UIView.animate(withDuration: 0.5, animations: { [weak self] in
 | |
|             guard let self = self else { return }
 | |
|             self.barRightConstraint.constant = 0
 | |
|             self.layoutIfNeeded()
 | |
|         }, completion: { [weak self] _ in
 | |
|             self?.step2()
 | |
|         })
 | |
|     }
 | |
|     
 | |
|     func step2() {
 | |
|         barLeftConstraint.constant = 0
 | |
|         UIView.animate(withDuration: 0.5, animations: { [weak self] in
 | |
|             guard let self = self else { return }
 | |
|             self.barLeftConstraint.constant = self.bounds.width
 | |
|             self.layoutIfNeeded()
 | |
|         }, completion: { [weak self] _ in
 | |
|             Timer.scheduledTimer(withTimeInterval: 0.25, repeats: false) { _ in
 | |
|                 self?.step3()
 | |
|             }
 | |
|         })
 | |
|     }
 | |
|     
 | |
|     func step3() {
 | |
|         barLeftConstraint.constant = bounds.width
 | |
|         UIView.animate(withDuration: 0.5, animations: { [weak self] in
 | |
|             guard let self = self else { return }
 | |
|             self.barLeftConstraint.constant = 0
 | |
|             self.layoutIfNeeded()
 | |
|         }, completion: { [weak self] _ in
 | |
|             self?.step4()
 | |
|         })
 | |
|     }
 | |
|     
 | |
|     func step4() {
 | |
|         barRightConstraint.constant = 0
 | |
|         UIView.animate(withDuration: 0.5, animations: { [weak self] in
 | |
|             guard let self = self else { return }
 | |
|             self.barRightConstraint.constant = -self.bounds.width
 | |
|             self.layoutIfNeeded()
 | |
|         }, completion: { [weak self] _ in
 | |
|             Timer.scheduledTimer(withTimeInterval: 0.25, repeats: false) { _ in
 | |
|                 self?.step1()
 | |
|             }
 | |
|         })
 | |
|     }
 | |
| }
 |