2017-02-13 1 views
0

WebView 기반 화면에서 작업 중이고 웹 콘텐츠로드 중 스핀 할 활동 표시기를 원합니다.iOS Swift - 다중 활동 표시기 (회 전자)가 웹보기에 표시됩니다.

앱의 다른 화면에서 동일한 활동 표시기를 사용해야하므로 코드를 정적 함수의 특정 파일에 넣었습니다.

활동 표시기는 일부 웹 (단순) 웹 페이지에서 제대로 작동하는 것으로 보이지만 더 복잡한 페이지를로드 할 때 문제가 있습니다. 활동 표시기가 여러 번 중복됩니다.스크린 샷에서

(아래 화면 참조), 제 활동 표시 정확한 배치를 갖지만 아래와 다른 여러 활동 지표 서로 위에 중첩 된 것을 의미한다 어둡다. 그리고 그들은 결코 사라지지 않습니다.

는 코드에 관해서 :

나는 웹보기 및 활동 지표를 제어하는 ​​두 대리자 메서드가 있습니다.

func webViewDidStartLoad(_ webView: UIWebView) { 

    DispatchQueue.main.async { 

     EBUtil.startActivityIndicator(self) 
    } 
} 

func webViewDidFinishLoad(_ webView: UIWebView) { 

    DispatchQueue.main.async { 

     EBUtil.stopActivityIndicator(self) 

    } 
} 

나는 webViewDidStartLoad가 여러 번 호출된다고 생각합니다. 어떻게하면이 문제가 발생하지 않도록 할 수 있습니까?

미리 감사드립니다.

에두아르

enter image description here

편집 : 여기

내 VC의 전체 코드입니다.

class NewsDetailsViewController: UIViewController, UIWebViewDelegate { 

//MARK: - @IBOUTLETS 

@IBOutlet weak var webView: UIWebView! 

//MARK: - VARIABLES 

var url: String! 

//MARK: - APP LIFE CYCLE 

override func viewDidLoad() { 
    super.viewDidLoad() 

    if url != nil { 

     let urlToLoad = NSURL(string: url) 

     webView.loadRequest(NSURLRequest(url: urlToLoad as! URL) as URLRequest) 
    } 
} 

func webViewDidStartLoad(_ webView: UIWebView) { 

    DispatchQueue.main.async { 

     EBUtil.startActivityIndicator(self) 
    } 
} 

func webViewDidFinishLoad(_ webView: UIWebView) { 

    DispatchQueue.main.async { 

     EBUtil.stopActivityIndicator(self) 

    } 
} 

} 활동 표시에 대한

그리고 코드를 시작하고 중지 :

static func startActivityIndicator(_ sender: UIViewController) { 


    print("START ANIMATING") 

    if let view = sender.view { 

     activityIndicatorBackground = UIView(frame: CGRect(x: view.center.x - 25, y: view.center.y - 25, width: 50, height: 50)) 
     activityIndicatorBackground.backgroundColor = UIColor.black 
     activityIndicatorBackground.layer.zPosition = CGFloat(MAXFLOAT-1) 
     activityIndicatorBackground.alpha = 0.6 
     activityIndicatorBackground.layer.cornerRadius = 5 

     view.addSubview(activityIndicatorBackground) 
     activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 
     activityIndicator.center = view.center 
     activityIndicator.hidesWhenStopped = true 
     activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.white 
     activityIndicator.layer.zPosition = CGFloat(MAXFLOAT) 
     view.addSubview(activityIndicator) 
     activityIndicator.startAnimating() 
     UIApplication.shared.beginIgnoringInteractionEvents() 
    } 
} 

static func stopActivityIndicator(_ sender: UIViewController) { 
    print("STOP ANIMATING") 
    activityIndicatorBackground.removeFromSuperview() 
    activityIndicator.stopAnimating() 
    UIApplication.shared.endIgnoringInteractionEvents() 
} 
+0

주이보기 컨트롤러의 전체 코드는 ... –

+0

당신이 화면에 웹보기를 추가하려면 어떻게 공유 할 것이 작동합니다 희망 below-과 같은 전자 귀하의 startActivityIndicatorstopActivityIndicator 방법 (즉, 루트보기)? – tropicalfish

+0

그 코드를 호출 할 때마다 새로운 표시기를 생성하고 있습니다. Bool로 다시 호출 한 경우 현재 코드를 제거하거나 클래스 함수가 ​​아닌 싱글 톤 클래스와 동일한 인스턴스를 사용하면됩니다. – Tj3n

답변

0

이 시도 -

var activityIndicator: UIActivityIndicatorView? 

-

당신의 ViewController 클래스에 선 아래 추가 그리고 updat

func startActivityIndicator(_ sender: UIViewController) { 

    print("START ANIMATING") 

    if let view = sender.view { 
     if activityIndicator != nil { 
      activityIndicator?.removeFromSuperview() 
     } 
     activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 
     activityIndicator?.center = view.center 
     activityIndicator?.layer.cornerRadius = 10 
     activityIndicator?.backgroundColor = UIColor.gray 
     activityIndicator?.hidesWhenStopped = true 
     activityIndicator?.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.white 
     activityIndicator?.layer.zPosition = CGFloat(MAXFLOAT) 
     view.addSubview(activityIndicator!) 
     activityIndicator?.startAnimating() 
     UIApplication.shared.beginIgnoringInteractionEvents() 
    } 
} 


func stopActivityIndicator(_ sender: UIViewController) { 
    print("STOP ANIMATING") 
    activityIndicator?.stopAnimating() 
    activityIndicator?.removeFromSuperview() 
    UIApplication.shared.endIgnoringInteractionEvents() 
} 

당신이 :)

관련 문제