WebView 기반 화면에서 작업 중이고 웹 콘텐츠로드 중 스핀 할 활동 표시기를 원합니다.iOS Swift - 다중 활동 표시기 (회 전자)가 웹보기에 표시됩니다.
앱의 다른 화면에서 동일한 활동 표시기를 사용해야하므로 코드를 정적 함수의 특정 파일에 넣었습니다.
활동 표시기는 일부 웹 (단순) 웹 페이지에서 제대로 작동하는 것으로 보이지만 더 복잡한 페이지를로드 할 때 문제가 있습니다. 활동 표시기가 여러 번 중복됩니다.스크린 샷에서
(아래 화면 참조), 제 활동 표시 정확한 배치를 갖지만 아래와 다른 여러 활동 지표 서로 위에 중첩 된 것을 의미한다 어둡다. 그리고 그들은 결코 사라지지 않습니다.
는 코드에 관해서 :
나는 웹보기 및 활동 지표를 제어하는 두 대리자 메서드가 있습니다.
func webViewDidStartLoad(_ webView: UIWebView) {
DispatchQueue.main.async {
EBUtil.startActivityIndicator(self)
}
}
func webViewDidFinishLoad(_ webView: UIWebView) {
DispatchQueue.main.async {
EBUtil.stopActivityIndicator(self)
}
}
나는 webViewDidStartLoad가 여러 번 호출된다고 생각합니다. 어떻게하면이 문제가 발생하지 않도록 할 수 있습니까?
미리 감사드립니다.
에두아르
편집 : 여기
내 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()
}
주이보기 컨트롤러의 전체 코드는 ... –
당신이 화면에 웹보기를 추가하려면 어떻게 공유 할 것이 작동합니다 희망 below-과 같은 전자 귀하의
startActivityIndicator
stopActivityIndicator
방법 (즉, 루트보기)? – tropicalfish그 코드를 호출 할 때마다 새로운 표시기를 생성하고 있습니다. Bool로 다시 호출 한 경우 현재 코드를 제거하거나 클래스 함수가 아닌 싱글 톤 클래스와 동일한 인스턴스를 사용하면됩니다. – Tj3n