How to show activity indicator while tableView loads?

前端 未结 12 1811
说谎
说谎 2021-01-30 21:44

When I switch between my tabs it loads some seconds and I want to know that my data is loading. For that I decided to add an activity indicator.

I wrote a little functio

12条回答
  •  无人共我
    2021-01-30 22:04

    Swift 3.0

    // UIView Extension

    fileprivate var ActivityIndicatorViewAssociativeKey = "ActivityIndicatorViewAssociativeKey"
    public extension UIView {
       var activityIndicatorView: UIActivityIndicatorView {
            get {
                if let activityIndicatorView = getAssociatedObject(&ActivityIndicatorViewAssociativeKey) as? UIActivityIndicatorView {
                    return activityIndicatorView
                } else {
                    let activityIndicatorView = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))
                    activityIndicatorView.activityIndicatorViewStyle = .gray
                    activityIndicatorView.color = .gray
                    activityIndicatorView.center = center
                    activityIndicatorView.hidesWhenStopped = true
                    addSubview(activityIndicatorView)
    
                    setAssociatedObject(activityIndicatorView, associativeKey: &ActivityIndicatorViewAssociativeKey, policy: .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
                    return activityIndicatorView
                }
            }
    
            set {
                addSubview(newValue)
                setAssociatedObject(newValue, associativeKey:&ActivityIndicatorViewAssociativeKey, policy: .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            }
        }
    }
    

    // NSObject Extension

    public extension NSObject {
        func setAssociatedObject(_ value: AnyObject?, associativeKey: UnsafeRawPointer, policy: objc_AssociationPolicy) {
            if let valueAsAnyObject = value {
                objc_setAssociatedObject(self, associativeKey, valueAsAnyObject, policy)
            }
        }
    
        func getAssociatedObject(_ associativeKey: UnsafeRawPointer) -> Any? {
            guard let valueAsType = objc_getAssociatedObject(self, associativeKey) else {
                return nil
            }
            return valueAsType
        }
    }
    

    start animation

    tableView.activityIndicatorView.startAnimating()

    stop animation

    tableView.activityIndicatorView.stopAnimating()

    You can find more code in Magic

提交回复
热议问题