2010-09-03 19 views
5

benim iPhone arayüzü döndüğü, bir UIViewController ... gibi belirli bir UIView için fade-in/fade-out yapmak istiyorum ne zaman ...Fade-in/fade-out bir arayüz dönüşü sırasında

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.3]; 
    theView.alpha = 0; 
    [UIView commitAnimations]; 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.3]; 
    theView.alpha = 1; 
    [UIView commitAnimations]; 
} 

Ama rotasyon başlamadan önce bitmez animasyon (biz kendi kendine yeniden boyutlandırma başlangıç ​​görünümü görebilir) ...

rotasyon başlatmak geciktirmek için bir yolu var mı?

"duration", dönen animasyonun süresidir, değil mi?

+0

Merhaba, sorununuzu nasıl çözdünüz? – sergiobuj

+0

Çözmedim. Animasyon süresini sadece 0.1 saniyeye ayarlıyorum –

cevap

7

Geçerli çalışma döngüsünü önceki animasyonla aynı süre boyunca çalıştırmanın aslında dönüşü geciktirdiğini buldum.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [UIView animateWithDuration:0.25 animations:^{ 
     theview.alpha = 0.0; 
    }]; 

    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.25]]; 
} 
0

Sorununuz, zamana göre Yeniden Çevirme ArayüzüYönetme: çağrılan, aslında döndürülen görünümün yönlendirme özelliğinin ayarlandığı ve döndürmeyi gerçekleştiren animasyon bloğunun da ayrı bir iş parçacığı üzerinde çalışmaya hazır olduğu gerçeğinden kaynaklanmaktadır. the documentation:

Bu yöntem, görünümü döndürmek için kullanılan animasyon bloğu içinden çağrılır. Bu yöntemi geçersiz kılabilir ve görüntüleme dönüşü sırasında oluşması gereken ek animasyonları yapılandırmak için kullanabilirsiniz.

Ben shouldAutorotateToInterfaceOrientation geçersiz kılma öneririm: desteklenen yönler için EVET dönmeden önce Animasyonunuzu yangın yöntemi:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
     // Return YES for supported orientations 
     if (interfaceOrientation == (UIDeviceOrientationPortrait || UIDeviceOrientationPortraitUpsideDown) { 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:0.3]; 
     theView.alpha = 0; 
     [UIView commitAnimations]; 
     } else { 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:0.3]; 
     theView.alpha = 1; 
     [UIView commitAnimations]; 
     } 
     return YES; 
} 

Bu animasyonu sağlamalıdır çalışır Hiç UIViewController yönünü ayarlamak önce ve rotasyon yangın animasyon. Cihazın donanım hızına bağlı olarak aradığınız etkiyi elde etmek için hafif bir gecikme eklemeniz gerekebilir.