首页 > 解决方案 > 如果在显示视图后调用函数,则 UIView 性能问题

问题描述

我有一个UIView在单击 a 时出现的UIButton。问题是这view是针对scraping一个网站的,所以在显示实际视图之前,我有一个coverView显示的loadingAnimation,直到从网站上抓取数据:

@objc func addWishButtonTapped() {
    self.coverView.isHidden = false
    self.loadingAnimation.play()
    self.wishView.isHidden = false
    self.cancelButton.isHidden = false
    self.wishView.dropDownButton.dropView.dropOptions = dropOptions
    crawlWebsite {
        DispatchQueue.main.async {
            self.hideLoadingView()
        }
    }
}

我的问题是,当crawlWebsite像上面那样调用时,动画很笨拙并且看起来不流畅:

笨拙的动画

我发现当我不调用crawlWebsite它时它看起来非常流畅:

流畅的动画

这是crawlWebsite

func crawlWebsite(finished: @escaping () -> Void){
    
    var html: String?
    let url = webView.url
    html = (self.getHTMLfromURL(url: url))
    print(url as Any)
    let directoryURL = url! as NSURL
    let urlString: String = directoryURL.absoluteString!
    // save url to wish
    self.wishView.link = urlString
    OpenGraphDataDownloader.shared.fetchOGData(urlString: urlString) { result in
        switch result {
        case let .success(data, _):
            // get productTitle
            guard let title = data.pageTitle else {finished(); return}
            print(title)
            DispatchQueue.main.async {
                self.wishView.wishNameTextField.text = title
                self.wishView.enableButton()
            }
            // get productImage
            guard let imageURL = data.imageUrl else {finished(); return }
            UIImage.loadFrom(url: imageURL, completion: { (image) in
                
                guard let image = image else { return }
                self.wishView.wishImageView.image = image
                self.imagesArray.append(image)
                self.wishView.hideAddImageButton()
                self.wishView.showImageView()
                finished()
            })
            finished()
            
        case let .failure(error, _):
            finished()
            print("OpenGraph-error: " + error.localizedDescription)
        }
    }
    DispatchQueue.main.async {
        self.getContentFromHTML(html: html)
    }
}

我很困在这里,不知道这里发生了什么。有人有想法吗?

标签: iosswiftanimationuiviewuibutton

解决方案


推荐阅读