CABasicAnimation
ile animasyonlu bazı animasyon öğeleri (tam olarak 2) olan bir YüklemeLayeri sınıfı uyguladık. Şimdi, bu yükleme ekranı görünümü tüm uygulama boyunca devam ediyor. Görünümü gizlemek tüm animasyonları durdurur mu? Ya da şunu tekrar söyleyeyim: Endişelenmem gereken ya da potansiyel olarak gecikmelere neden olabilecek çok fazla bellek var mı? -pauseLayer:
ve -resumeLayer:
yöntemlerini kullanmayı denedim ancak uygulamamdaki çoklu okuma nedeniyle bazı sorunlara neden oldular. Bu nedenle, her zaman çalışan animasyonları ile yükleme ekranını gizlemek ve göstermek yeterli midir?Yükleme için CABasicAnimation ekranını duraklatıp devam ettirin mi?
cevap
https://developer.apple.com/library/content/qa/qa1673/_index.html
görünümü gizli ise-(void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
-(void)resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;
}
(görünmez ya da hiç arayüzünde), sonra render ağacın parçası değildir.
Ancak, bu katmanın görünümünde yerleşik olan görünüm denetleyicisi arabirimi kapattığında (viewDidDisappear
) neden animasyonu durdurmuyor? Sadece katmanı removeAllAnimations
'a söyle. Ardından, animasyonu viewWillAppear
içinde yeniden oluşturun.
İşte Nico's yanıtının hızlı 3 sürümüdür.
Umut yardımcı olur!
fileprivate func pauseLayer(layer: CALayer) {
let pausedTime = layer.convertTime(CACurrentMediaTime(), from: nil)
layer.speed = 0.0
layer.timeOffset = pausedTime
}
fileprivate func resumeLayer(layer: CALayer) {
let pausedTime = layer.timeOffset
layer.speed = 1.0
layer.timeOffset = 0.0
layer.beginTime = 0.0
let timeSincePause = layer.convertTime(CACurrentMediaTime(), from: nil) - pausedTime
layer.beginTime = timeSincePause
}
herhangi değişkene hızını değiştirmek için Nico cevabını genişletme:
extension CALayer {
func udpate(speed newSpeed: Float) {
let newSpeed = newSpeed == 0 ? 1e-6 : newSpeed
let triggerTime = self.convertTime(CACurrentMediaTime(), from: nil)
let offset = self.timeOffset
let begin = self.beginTime
let speed = self.speed
self.beginTime = (triggerTime - offset)/Double(speed) + begin
self.timeOffset = triggerTime
self.speed = newSpeed
}
}
kullanın bu yaklaşım, etkileşimli katman animasyon hızını değiştirmek için istekli iseniz. Eğer Tamamen katmanı durdurmak istiyorsanız, animasyonlar bitirmek için speed=0.0
ile bu yöntemi kullanarak aslında yaklaşık 11 gün alacak olsa, Nico cevabı kullanmalıdır ve 1 saat animasyon ben oldukça benzer vardı yaklaşık 0.0036
- 1. Salt okunur şemadaki işlemleri devam ettirin mi?
- 2. CABasicAnimation
- 3. Delphi - TMagFtp bileşenini kullanarak dosya yüklemesini devam ettirin
- 4. Bir açısal aralığı duraklatıp
- 5. silverlight yükleme ekranını devre dışı bırakma
- 6. Android: singleTop veya SingleTask ile aktiviteyi devam ettirin
- 7. Bash komut dosyasından çıkın ama işlemi devam ettirin
- 8. , nesne etiketinin ekranını değiştirmeye devam etmesini engeller (stilin görüntüleme özelliği)
- 9. CABasicAnimation akım geçen süre
- 10. UIPercentDrivenInteractiveTransition with CABasicAnimation
- 11. İçeri girin ve hareket ettirin
- 12. MEmu öykünücüsü ekranını yakalama
- 13. NSURLProtocol ve karşıya yükleme devam ediyor
- 14. CABasicAnimation HUGE_VALF olmadan sınırsız tekrar?
- 15. iPhone'da UIView CABasicAnimation nasıl durdurulur
- 16. Ekran 'yükleme' görüntü AJAX çağrı devam
- 17. Durdurma CABasicAnimation tamamlanmasından sonra kaldırılmakta
- 18. Yanlış yükleme geçersiz mi?
- 19. Devam etmeden önce jQuery show() işlemini bitirmek için bekleyin mi?
- 20. Karşılama ekranını Emacs
- 21. Girdinin ekranını TextBox
- 22. Düzenleme parola ekranını gösterme
- 23. iOS kilit ekranını
- 24. Dosyayı indirmek ve yükleme ekranını göstermek için açısal js yolu $ kaynak
- 25. Sıçrama ekranını PhoneGap
- 26. IdentityServer3 Onay ekranını atlayarak
- 27. QML: QML ekranını
- 28. Fareyi wpf içinde hareket ettirin
- 29. Çerçevesiz bir QWindow hareket ettirin
- 30. Birden çok özellik için bir CABasicAnimation nasıl oluşturabilirim?
ilerleyeceğine Uygulama ama seninki çalışıyor, teşekkürler! –
Tamam, hayır, aslında tam olarak aynı uygulamaya sahibim. Ama şimdi neden zaman zaman çalışmayı durdurduğunu biliyorum. Uygulama arka plana girdiğinde ve yeniden başlattığımda, animasyonlar tekrar çalışmayacaktı. Buna neyin sebep olabileceği hakkında bir fikrin var mı? –
animasyonları temizlemeyi ve bunları açıklamayı deneyin didBeomceActive – Nico