मेरे पास मेरे विचार के अंदर स्पिनर को एनिमेट करने के लिए एक फ़ंक्शन है, और इस फ़ंक्शन के अंदर मैंने जब भी आवश्यक हो एनीमेशन शुरू करने और रोकने के लिए दो फ़ंक्शन जोड़े, मुझे इस मुख्य फ़ंक्शन के अंदर फ़ंक्शन को कॉल करने की आवश्यकता है, क्या इसे प्राप्त करने का कोई तरीका है?

override func viewDidLoad() {
        super.viewDidLoad()
   
        SpinnerAnimiation()

    }
   

    fileprivate func SpinnerAnimiation() {
            let loading = NVActivityIndicatorView(frame: .zero, type: .ballBeat, color: .blue, padding: 0)
            loading.translatesAutoresizingMaskIntoConstraints = false
            view.addSubview(loading)
            NSLayoutConstraint.activate([
                loading.widthAnchor.constraint(equalToConstant: 40),
                loading.heightAnchor.constraint(equalToConstant: 40),
                loading.centerYAnchor.constraint(equalTo: view.centerYAnchor),
                loading.centerXAnchor.constraint(equalTo: view.centerXAnchor)
            ])
            
            func start() {
                loading.startAnimating()
            }
            
            func stop() {
                loading.stopAnimating()
            }
         
        }
0
Jacob 8 फरवरी 2021, 12:09

2 जवाब

सबसे बढ़िया उत्तर

मुझे लगता है कि इसे करने का बेहतर तरीका UIViewController की संपत्ति के रूप में UI तत्व घोषित करना है, इस तत्व को कॉन्फ़िगर करें और फिर UIViewController के अंदर इसे संचालित करने के लिए दो कार्य करें।

import UIKit

class MyViewController: UIViewController {
   private let loading = NVActivityIndicatorView(frame: .zero, type: .ballBeat, color: .blue, padding: 0)

   private func configureLoading() {
       loading.translatesAutoresizingMaskIntoConstraints = false
            view.addSubview(loading)
            NSLayoutConstraint.activate([
                loading.widthAnchor.constraint(equalToConstant: 40),
                loading.heightAnchor.constraint(equalToConstant: 40),
                loading.centerYAnchor.constraint(equalTo: view.centerYAnchor),
                loading.centerXAnchor.constraint(equalTo: view.centerXAnchor)
            ])
   }

   override func viewDidLoad() {
        super.viewDidLoad()

        configureLoading()
   }

   private func start() {
      loading.startAnimating()
   }
            
   private func stop() {
       loading.stopAnimating()
   }
     
}
0
Sergei Sevriugin 8 फरवरी 2021, 12:40

आप लोडिंग व्यू जोड़ने के लिए एक्सटेंशन का उपयोग कर सकते हैं और NVActivityIndicatorView को देखने के लिए टैग के साथ NVActivityIndicatorView खोजने के लिए एनीमेशन शुरू या बंद कर सकते हैं:

extension UIViewController {
    
    public func addLoadingView() {
        
        // check view with tag
        guard self.view.viewWithTag(9876) == nil else {
            return
        }
        
        let loading = NVActivityIndicatorView(frame: .zero, type: .ballBeat, color: .blue, padding: 0)
        loading.translatesAutoresizingMaskIntoConstraints = false
        
        // set custom tag for prevent add twice
        loading.tag = 9876
        
        self.view.addSubview(loading)
        NSLayoutConstraint.activate([
            loading.widthAnchor.constraint(equalToConstant: 40),
            loading.heightAnchor.constraint(equalToConstant: 40),
            loading.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            loading.centerXAnchor.constraint(equalTo: view.centerXAnchor)
        ])
    }
    
    public func startLoading() {
        guard let loadingView = self.view.viewWithTag(9876) as? UIView else {
            return
        }
        
        loadingView.startAnimation()
    }
    
    public func stopLoading() {
        guard let loadingView = self.view.viewWithTag(9876) as? UIView else {
            return
        }
        
        loadingView.stopAnimation()
    }
}

और इस तरह प्रयोग करें:

public class ViewController: UIViewController {
    
    public override func viewDidLoad() {
        super.viewDidLoad()
        
        self.addLoadingView()
        self.stopLoading()
        self.startLoading()
    }
}
0
hessam mahdiabadi 8 फरवरी 2021, 13:36