TIPullToRefresh/Example/RMRPullToRefresh/BeelineView.swift

86 lines
2.3 KiB
Swift

//
// BeelineView.swift
// RMRPullToRefresh
//
// Created by Merkulov Ilya on 10.04.16.
// Copyright © 2016 Merkulov Ilya. All rights reserved.
//
import UIKit
import RMRPullToRefresh
enum AnimationStage: Int {
case Stage1 // big medium small
case Stage2 // big medium
case Stage3 // big
case Stage4 //
case Stage5 // big
case Stage6 // big medium
static var count: Int { return AnimationStage.Stage6.hashValue + 1}
}
class BeelineView: RMRPullToRefreshView {
@IBOutlet var bigIcons: [UIImageView]!
@IBOutlet var mediumIcons: [UIImageView]!
@IBOutlet var smallIcons: [UIImageView]!
var animationIsCanceled = false
var animationStage: AnimationStage?
class func XIB_VIEW() -> BeelineView? {
let subviewArray = NSBundle.mainBundle().loadNibNamed("BeelineView", owner: self, options: nil)
return subviewArray.first as? BeelineView
}
// MARK: - Private
func hideBigIcons(hide: Bool) {
for iV in bigIcons { iV.hidden = hide }
}
func hideMediumIcons(hide: Bool) {
for iV in mediumIcons { iV.hidden = hide }
}
func hideSmallIcons(hide: Bool) {
for iV in smallIcons { iV.hidden = hide }
}
@objc func executeAnimation() {
if animationIsCanceled {
return
}
hideBigIcons(animationStage == .Stage4)
hideMediumIcons(animationStage == .Stage3 || animationStage == .Stage4 || animationStage == .Stage5)
hideSmallIcons(animationStage != .Stage1)
if let stage = animationStage {
animationStage = AnimationStage(rawValue: (stage.rawValue+1)%AnimationStage.count)
}
performSelector(#selector(executeAnimation), withObject: nil, afterDelay: 0.4)
}
// MARK: - RMRPullToRefreshViewProtocol
override func didChangeDraggingProgress(progress: CGFloat) {
hideBigIcons(progress < 0.33)
hideMediumIcons(progress < 0.66)
hideSmallIcons(progress < 0.99)
}
override func beginLoadingAnimation() {
animationIsCanceled = false
animationStage = .Stage1
executeAnimation()
}
override func didEndLoadingAnimation(hidden: Bool) {
animationIsCanceled = true
}
}