Попробуйте это: в html: class="popupp"
измените на id="popupp"
и в javascript: document.getElementById("popupp").style.visibility = visible;
измените на document.getElementById("popupp").style.visibility = "visible";
dispatch_after()
- это стандартный способ задержки действий.
indicator.startAnimating()
let delay = 4.5 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue()) {
indicator.stopAnimating()
}
См .: dispatch_after - GCD in swift?
Обновление для Swift 3.0
indicator.startAnimating()
let delay = Int(4.5 * Double(1000))
DispatchQueue.main.after(when: .now() + .milliseconds(delay)) {
indicator.stopAnimating()
}
Однако, Я думаю, что в духе Swift 3.0 расширение DispatchQueue
было бы лучшим решением.
extension DispatchQueue {
func delay(_ timeInterval: TimeInterval, execute work: () -> Void) {
let milliseconds = Int(timeInterval * Double(1000))
after(when: .now() + .milliseconds(milliseconds), execute: work)
}
}
Это оставляет нас с очень хорошим
indicator.startAnimating()
DispatchQueue.main.delay(4.5) {
indicator.stopAnimating()
}
Обновление 2
Копаясь в бета-версию Xcode 8.0, я нашел public func +(time: DispatchTime, seconds: Double) -> DispatchTime
. Итак, я думаю, что это действительно так ...
indicator.startAnimating()
DispatchQueue.main.after(when: .now() + 4.5) {
indicator.stopAnimating()
}
Я не думаю, что есть необходимость в расширении DispatchQueue
для чего-то такого уже чистого.
-
Обновление для Swift 3.1
Существует новый синтаксис для Swift 3.1. Они просто любят что-то менять, не так ли?
indicator.startAnimating()
DispatchQueue.main.asyncAfter(deadline: .now() + 4.5) {
indicator.stopAnimating()
}
С обновленным синтаксисом Swift 3 это становится
DispatchQueue.main.asyncAfter(deadline: .now() + 4.5) {
indicator.stopAnimating()
}
Вот более чистый и выразительный код для этого, используя Swift 3.1 и Grand Central Dispatch:
Swift 3.1:
indicator.startAnimating()
// Runs after 1 second on the main queue.
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1) ) {
indicator.stopAnimating()
}
Также .seconds(Int)
, .microseconds(Int)
и .nanoseconds(Int)
могут быть использованы для времени.
Новое в iOS 10, Таймер имеет инициализатор блока , который выполняется в основном потоке. Это также немного более гибко, потому что вы можете взять ссылку на Таймер и отменить его или перенести его по факту.
let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false) {_ in
}