27 EYLÜL 2012, PERŞEMBE
Nasıl sınırlama değişiklikleri animasyon muyum?
AdBannerView
eski bir uygulama yeniliyorum ve reklam yoktur hiçbir zaman, ekran kapalı slayt. Bu ekran üzerinde slayt bir reklam var. Temel şeyler.
Eski stil, animasyon bir blok çerçevesi hazırladım.
Yeni stil, IBOutlet
Y belirleyen kısıtlaması için bir pozisyon var, bu durumda superview altından mesafe ve sürekli değiştir.
- (void)moveBannerOffScreen {
[UIView animateWithDuration:5
animations:^{
_addBannerDistanceFromBottomConstraint.constant = -32;
}];
bannerIsVisible = FALSE;
}
- (void)moveBannerOnScreen {
[UIView animateWithDuration:5
animations:^{
_addBannerDistanceFromBottomConstraint.constant = 0;
}];
bannerIsVisible = TRUE;
}
Ve banner hamle, tam da beklendiği gibi, ama animasyon yok.
GÜNCELLEME:Ben yeniden izledim WWDC12 video "Best Practices for Mastering Auto Layout" animasyon kapsar. Kısıtlamaları güncelleme nasıl yapılır CoreAnimation
kullanarak anlatılır.
Aşağıdaki kodu denedim, ama tam olarak aynı sonuçları elde.
- (void)moveBannerOffScreen {
_addBannerDistanceFromBottomConstraint.constant = -32;
[UIView animateWithDuration:2
animations:^{
[self.view setNeedsLayout];
}];
bannerIsVisible = FALSE;
}
- (void)moveBannerOnScreen {
_addBannerDistanceFromBottomConstraint.constant = 0;
[UIView animateWithDuration:2
animations:^{
[self.view setNeedsLayout];
}];
bannerIsVisible = TRUE;
}
Bir yan not olarak, birçok kez kontrol ettim ve bu ana iş parçacığında yürütülür.
CEVAP
30 EYLÜL 2012, Pazar
Önemli notlar:
- Animasyon blok içinde
layoutIfNeeded
aramalısın. Apple actually recommends animasyon blok önce bir kez bekleyen tüm düzen işlemleri tamamlanmıştır emin olmak için arayın - Bunu özellikle aramak gerekirüst görünüm(*9 örneğin*), kısıtlamalar, bağlı olduğu alt görünüm. Böylece güncellenirtümkısıtlı görüş, animasyon dahil olmak üzere diğer görüşleri olabilir kısıtlı görünümü değiştirdin kısıtlamanın (örneğin, Görünüm B bağlı alt Görünüm ve Görünüm değişti Bir üst ofset ve istediğiniz Görünümü B animate ile)
Bunu deneyin:
- (void)moveBannerOffScreen {
[self.view layoutIfNeeded];
_addBannerDistanceFromBottomConstraint.constant = -32;
[UIView animateWithDuration:5
animations:^{
[self.view layoutIfNeeded]; // Called on parent view
}];
bannerIsVisible = FALSE;
}
- (void)moveBannerOnScreen {
[self.view layoutIfNeeded];
_addBannerDistanceFromBottomConstraint.constant = 0;
[UIView animateWithDuration:5
animations:^{
[self.view layoutIfNeeded]; // Called on parent view
}];
bannerIsVisible = TRUE;
}
Bunu Paylaş:
Nasıl önceki duruma Git yönetilen proj...
Nasıl AngularJS model değişiklikleri i...
Nasıl bir git submodule benim değişikl...
Nasıl Gıt unstaged değişiklikleri atma...
Nasıl Gıt (chmod) dosya mod değişiklik...