2013-09-05 17 views
10

yeniden belirir benim yapılandırma var: Bir ListViewController bir film şeridi varUIView animasyon o zaman devam etmez durur İşte

. ListViewController'ın bir alt görünümü olan UIView, EmptyListView adında. EmptyListView sadece UITableView'de hiçbir öğe olmadığında gösterilir, aksi halde gizlenir.

EmptyListView görsel düğme doğru noktalar benim UITableView yeni bir giriş oluşturmak için emptyListViewArrow adında bir Subview UIImageView vardır. Bu ok bir yukarı & aşağı moda sonsuz canlandırılmıştır.

Ben 's subviews dışarı atarken tamamlandığında EmptyListView bir bildirim göndermek için dinler. Bunu yapıyorum çünkü eğer kısıtlamalardan muaf olan animasyonlar yanlış davranıyor.

- (void) layoutSubviews { 
    [super layoutSubviews]; 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"EmptyViewDidLayoutSubviews" object:nil]; 
} 
ListViewController bu bildirimi gözlemler, bu animasyonu başlar

: Arka planda app koymak ya da ben uygulaması veya geri gelmek kez yığın başka ViewController bastırırsanız

[UIView animateWithDuration:0.8f delay:0.0f options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse) animations:^{ 
    self.emptyListViewArrowVerticalSpace.constant = 15.0f; 
    [emptyListView layoutIfNeeded]; 
} completion:nil]; 

ListViewController, animasyon durduruldu/duraklatıldı. Tekrar başlayamıyorum.

denedim:

  1. istifa edecek uygulama için dinleme/aktif hale gelir. istifa zaman, [self.view.layer removeAllAnimations] yaptığı ve yukarıdaki kodu kullanarak tekrar animasyon başlatmak için çalışılmıştır. UIImageView Çıkarma
  2. animasyonlu ve arka üst görünümüne ekleyerek ve ardından animasyon başlatmak için yargılanıyor.

Burada kısıtlamalar kullanarak pişmanlık duyuyorum, ancak sorunun ne olabileceğine dair herhangi bir bilgi isterim.

Teşekkür ederiz!

+0

Yöntemlerinizi "viewDidLoad" veya "viewWillAppear" yöntemlerinde mi kullanıyorsunuz? – iOS

+0

viewDidAppear, ancak herhangi bir nedenden dolayı değil. – chrysb

cevap

9

Bu bildirimle ne yaptığınızdan emin değilim. Kısıtlı bir sürü animasyon yaptım ve bunu yapmak zorunda kalmamıştım. Bence problemi görüyorsanız, kısıtlamanın sabit değeri 15 olacak (viewWillDisappear'daki günlükler ile doğruladım), böylece 15'e ayarlanacak olan animasyon hiçbir şey yapmayacaktır. Bir test uygulamasında, bir viewWillAppear, başlangıç ​​değerine (0) geri sabit set, ve iyi çalıştı:

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.bottomCon.constant = 0; 
    [self.view layoutIfNeeded]; 
} 


-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [UIView animateWithDuration:1 delay:0.0f options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse animations:^{ 
     self.bottomCon.constant = -40.0f; 
     [self.view layoutIfNeeded]; 
    } completion:nil]; 
} 
+0

Evet! İşe yaradı. İçgörün için çok teşekkür ederim. – chrysb

5

Bu dezavantajı olup. tekrar canlandırma yöntemi çağırmak zorunda Bunun üstesinden gelmek için. aşağıdaki gibi

Bunu yapabilirsiniz: app devam kez

çağrılan alacak Kumandanızda

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resumeAnimation:) name:UIApplicationDidBecomeActiveNotification object:nil]; 

Bu içinde Observer ekleyin.Bu size yardımcı olacaktır

- (void)resumeAnimation:(NSNotification *)iRecognizer { 
    // Restart Animation 
} 

Hope:

bu yöntemi ekleyin.