К сожалению, я обнаружил, что UIView.animateWithDuration
останавливается, как только вы сворачиваете свое приложение на рабочий стол и не возобновляете его, как только вы возвращаете его на передний план.Возобновить animateWithDuration. Повторить после возврата на передний план
Я провел последний час, пытаясь понять, как это решить (путем обнаружения переключения фона/переднего плана) и привело к добавлению наблюдателя. Я сделал это и успешно обнаружил его с помощью отладочного сообщения в консоли; однако я уверен, как возобновить анимацию (ы) в моих взглядах. Каков правильный способ приостановить/возобновить или даже перезапустить анимацию, когда приложение будет загружено обратно на передний план?
ViewController.swift
class ViewController: UIViewController {
func cameBackFromSleep(sender : AnyObject) {
// Restart animation here or resume?
print ("If you can see this, congrats... observer works :-)")
}
override func viewDidLoad() {
super.viewDidLoad()
// Observer to detect return from background
NSNotificationCenter.defaultCenter().addObserver( self, selector: #selector(ViewController0.cameBackFromSleep(_:)), name: UIApplicationDidBecomeActiveNotification, object: nil )
// Add a label
let label = UILabel(frame: CGRectMake(0, 600 , 200, 200))
label.text = "test message"
label.font = UIFont.boldSystemFontOfSize(12)
label.sizeToFit()
self.view.addSubview(label)
// Animation to move label
func animateText() {
UIView.animateWithDuration(2.0, delay: 0.0, options: [ .Autoreverse, .Repeat, .CurveEaseInOut, .BeginFromCurrentState], animations: {
label.alpha = 0.3
label.frame.origin.x = ((global.maxwidth/2) * -1)
}, completion: { finished in
if finished {
label.frame.origin.x = 0.0
}
})
}
// This guy here stops once you minimize the app to background
animateText()
}
}
Я новичок в разработке Swift/iOS. Поскольку 'comeBackFromSleep()' выходит из области viewDidLoad() 'как я могу вызвать' animateText() ', который находится внутри' viewDidLoad() '? – theflarenet
Вам нужно добавить 'func animateText()' OUTSIDE 'viewDidLoad()'. Таким образом, вы можете получить доступ к нему из любого другого метода. Поэтому поставьте 'func animateText()' ниже 'viewDidLoad()' и введите 'animateText()' в 'comeBackFromSleep()'. – Lawrence413
Я понял, что это будет простое решение, но моя фактическая функция анимации имеет другие переменные, которые зависят от ширины метки в представлении, как только она уже запущена. У меня получилось сложным, что, по моему мнению, мое единственное решение - как-то удалить ярлык и снова добавить его в представление с анимацией каждый раз, когда приложение возвращается на передний план. – theflarenet