2013-06-28 13 views
10

Şu anda UILabel'de metin görüntülemek için atanan her bir numaraya rastgele bir sayı oluşturan bir düğme için bir IBAction var. Görünüşten ziyade, metnin solması ya da diğer ilginç animasyonların da soğumasını istiyorum. Bunu yapmak için basit bir yol bilen var mı?UILabel’a nasıl metin girebilirim?

Şu anda sadece aşağıdaki kod etiketinde etkisi solmaya size verecektir

labelMain.text = @"my text"; 

cevap

27

kullanın.

- (IBAction)buttonClicked:(UIButton *)sender 
    { 
    labelMain.alpha = 0; 

    [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseIn 
    animations:^{ labelMain.alpha = 1;} 
    completion:nil]; 
} 
+0

Çok teşekkür ederim! Bu birinciydi ve bir cazibe gibi çalıştı! Süreyi ayarlamak ve geciktirmek için çok basit ve kolay! – Herbie999

+0

Yardım etmek için mutlu :) @ Herbie999 –

1

bu deneyin:

[labelMain setAlpha:0]; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.8]; 
[labelMain setAlpha:1]; 
[UIView commitAnimations]; 

süresini değiştirme oldukça basittir - sadece kod değerini 0.8 ayarlayın.

+2

Bloklar daha güçlüdür. AnimateWithDuration için başlangıçlara göz atmayı düşünmelisiniz. – rdurand

6
label.text = @"old text"; 
    [UIView animateWithDuration:0.4 animations:^{ 
     label.alpha = 0.0f; 
    } completion:^(BOOL finished) { 
     label.text = @"next text"; 
     [UIView animateWithDuration:0.4 animations:^{ 
      label.alpha = 1.0f; 
     } completion:^(BOOL finished) { 
      NSLog(@"finished transition"); 
     }]; 
    }]; 
0
// fade out the current value 
[UIView animateWithDuration:0.2 
         delay:0 
        options:0 
       animations:^{ 
        labelMain.alpha = 0.0f; 
       } 
       completion:^(BOOL finished) { 
        // set the new value and fade in 
        labelMain.text = newValue; 
        [UIView animateWithDuration:0.2 
             delay:0 
             options:0 
            animations:^{ 
             labelMain.alpha = 1.0f; 
            } 
            completion:nil]; 

       }]; 
0

bu özelliktir (11 aylık) biraz bayat olduğunu biliyorum, ama yayınlanan diğer yaklaşımlara bir alternatif kayda değer olduğunu düşünüyorum çapraz solmaya animasyon

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut 
     animations:^{ 
    labelMain.alpha = 0; 

     [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseIn 
     animations:^{ labelMain.alpha = 1;} 
     completion:nil]; 

    } completion:nil]; 
26

benzeyecek ki daha iyi bir çözüm. Böyle UIView transitionWithView:duration:options:animations:completion sınıf düzeyindeki yönteminin

yararlanın:

NSTimeInterval duration = 0.5f; 
[UIView transitionWithView:labelMain 
        duration:duration 
        options:UIViewAnimationOptionTransitionCrossDissolve 
       animations:^{ 
        labelMain.text = @"new value"; 
       } completion:nil]; 

Bu çapraz-soldurma olacak labelMain.text için "yeni bir değer" önceki değerinden. Bu yaklaşım, örneğin bir UIImageView görüntüsünü değiştirmek gibi diğer görünüm değerlerinde de çalışır.

Konuyla ilgili Apple's docs adresine bakın.

+1

Herkesin aynı süper görüntüdeki çok sayıda etiketi canlandırmak istediği bir ipucu, sadece superview'inizi "transitionWithView" argümanında kullanın. –

+2

Bunu yapmanın en iyi yolu budur. Bunun neden kabul edilen cevap olmadığını bilmiyorum. –