#ios #swift #animation #uiview #uibutton
#iOS #swift #Анимация #uiview #uibutton
Вопрос:
У меня есть a UIView
, который появляется при нажатии a UIButton
. Дело в том, что это для веб-сайта, поэтому перед отображением фактического представления у меня есть a с a, который отображается до тех пор, пока данные не будут удалены с веб-сайта 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)
}
}
Я совсем застрял здесь и не знаю, что здесь происходит. У кого-нибудь есть идея?
Комментарии:
1. Попробуйте вызвать
crawlWebsite
фоновый поток.2. Что делает self.getContentFromHTML(html: html)? Также я бы, вероятно, переместил каждое обновление представления внутрь обработчика завершения и получил доступ только к основному потоку там.
3. @krlbsk как мне это сделать?
4. @Chris Попробуйте
DispatchQueue.global().async { self.crawlWebsite { ... } }
.5. @MarcoBoerner он ищет в HTML цену и изображения