2009-09-14 13 views
32

Bir süre önce iPhone'daki Klavyenin animasyon hızını tanımlayan bir çeşit sabit gördüğümü hatırlıyorum ve hayatımı göremediğim yeri hatırlayamıyorum .... herhangi bir kavrayış mı?iPhone'un varsayılan klavye animasyon hızı nedir?

+4

var edildi ! : P –

+8

Klavye stili ve döndürme davranışı 2.2.1 ve 3.0 arasında değiştirildi; kim daha sonraki versiyonlarda animasyon oranını değiştirmeyecek? – rpetrich

+0

Buna daha da iyi bir cevap http://stackoverflow.com/a/19235995/39946 adresinde bulunabilir. Doğru süreyi ve doğru animasyon eğrisini sağlar. –

cevap

65
- (NSTimeInterval)keyboardAnimationDurationForNotification:(NSNotification*)notification 
{ 
    NSDictionary* info = [notification userInfo]; 
    NSValue* value = [info objectForKey:UIKeyboardAnimationDurationUserInfoKey]; 
    NSTimeInterval duration = 0; 
    [value getValue:&duration]; 
    return duration; 
} 
+1

Eğer buraya MonoTouch cevabını aramak için geldiyseniz, e.AnimationDuration'dan başka bir yere bakmayın. –

+2

Kesin olması için, UIKeyboardAnimationCurveUserInfoKey' gibi diğer animasyon tuşlarını da ayarlamanız gerektiğini unutmayın. – Rick

+0

@Dan, Ben bir MonoTouch kullanıcısıyım, ama 'e' nedir? –

2

UIKeyboardAnimationDurationUserInfoKey Animasyon süresini saniye cinsinden tanımlayan bir çift içeren bir NSValue nesnesinin anahtarı.

+0

Hey dostum, bildirimin kullanıcı bilgisi sözlüğünde UIKeyboardAnimationDurationUserInfoKey anahtarıdır ???? -thx – ShortCircuit

11

bu ilk google isabet olduğundan, sabit kodlama 0.3 görüşünüz yanlış animasyon anlamına gelecektir işaret etmek istiyorum ne zaman uluslararası kullanıcılar farklı büyüklükteki klavyeler arasında (örneğin Japonca) takas (Bu eylem anında olmalı).

Her zaman bildirimin userInfo sözlüğünün UIKeyboardAnimationDurationUserInfoKey değeri değerini kullanın - kullanıcı klavyeden geçerken 0'a ayarlanır.

+2

NB: yazma sırasında (iOS 5.1.1) varsayılan süre şimdi 0,25s'dir. @greenlight'ın dediği gibi, bunu hiç kodlama - bildirimin userInfo sözlüğündeki verileri kullan. –

6

Shaggy Frog'un yazdıklarına biraz daha eklemek için.

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardMovement:) 
              name:UIKeyboardWillShowNotification 
              object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardMovement:) 
              name:UIKeyboardWillHideNotification 
              object:nil]; 


-(void)keyboardMovement:(NSNotification *)notification{ 
    if (_numericKeyboardShowing == false){ 
     [UIView animateWithDuration:[self keyboardAnimationDurationForNotification:notification] delay:0 
         options:UIViewAnimationCurveEaseInOut 
        animations:^ { 
         self.bottomContainerView.center = CGPointMake(self.bottomContainerView.center.x, (self.bottomContainerView.center.y - 218)); 
            } 
        completion:NULL]; 

    _numericKeyboardShowing = true; 
    } 
    else{ 
    [UIView animateWithDuration:[self keyboardAnimationDurationForNotification:notification] delay:0 
         options:UIViewAnimationCurveLinear 
        animations:^ { 
         self.bottomContainerView.center = CGPointMake(self.bottomContainerView.center.x, (self.bottomContainerView.center.y + 218)); 
        } 
        completion:NULL]; 

    _numericKeyboardShowing = false; 
} 

- (NSTimeInterval)keyboardAnimationDurationForNotification:(NSNotification *)notification 
{ 
    NSDictionary *info  = [notification userInfo]; 
    NSValue* value   = [info objectForKey:UIKeyboardAnimationDurationUserInfoKey]; 
    NSTimeInterval duration = 0; 
    [value getValue:&duration]; 
    return duration; 
} 
16

UIKeyboardAnimationDurationUserInfoKey şimdi kod kısaltır bir NSNumber nesnesidir: tam olarak uygulanması gibi bir şey olurdu. kod aşağıdaki gibi görünecek Swift ise

- (void)keyboardWillShowNotification:(NSNotification *)notification 
{ 
    NSDictionary *info = [notification userInfo]; 
    NSNumber *number = [info objectForKey:UIKeyboardAnimationDurationUserInfoKey]; 
    double duration = [number doubleValue]; 
} 
+0

Tek liner: 'double duration = [notification.userInfo [UIKeyboardAnimationDurationUserInfoKey] doubleValue];' –

2

:

let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size 

let animationDuration = ((userInfo[UIKeyboardAnimationDurationUserInfoKey]) as! NSNumber).floatValue 
let animationOptions = ((userInfo[UIKeyboardAnimationCurveUserInfoKey]) as! NSNumber).unsignedLongValue 

UIView.animateWithDuration(NSTimeInterval(animationDuration), delay: 0, 
    options: UIViewAnimationOptions(rawValue: animationOptions), 
    animations: {() -> Void in 
       self.view.frame.origin.y += keyboardSize.height 
       }, 
    completion: nil) 
0

Swift 4 - benim için çalıştı:

 if let duration = notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? Double { 
      UIView.animate(withDuration: duration, animations: { 
       self.view.layoutIfNeeded() 
      }) 
     } 

ayıklama modunda benim duration Her zaman 0.3 3.499999

İlgili konular