2015-03-06 15 views
8

Według Apple documentation, możliwe jest programowe ustawienie wartości UISlider z płynną animacją. Próbuję to zrobić z niestandardowego kontrolera widoku, interfejs jest definiowany z storyboardu.Dlaczego mój animator UISlider nie jest animowany?

Kontekst

W moim przykładzie mam próbuje zaktualizować wartość suwaka z kontrolera widoku niestandardowego, interfejs użytkownika jest zdefiniowana z ujęć. Przykład pokazuje tylko jeden suwak.

Po zwolnieniu suwaka przez użytkownika wartość zostanie zresetowana na 0.

Kodeks

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var mySlider: UISlider! 
    @IBAction func resetSlider() { 
     mySlider.setValue(0, animated:true) 
     NSLog("Reset!") 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

} 

resetSlider jest powiązany ze zdarzeniem Touch Up Inside.

Problem

Kiedy resetSlider nazywa wartość ulega zmianie na interfejsie, ale nie animować (wartość po prostu „skacze” na 0). Moim celem jest przywrócenie wartości do zera.

Uwaga: "Resetuj!" wyświetla tylko raz (za kliknięcie), co oznacza, że ​​resetSlider nie jest wywoływana wiele razy.

Dlaczego ten program UISlider nie jest animowany?

The Video

Od IB jest tak wizualny, here is a video sytuacji, hasło jest code

Odpowiedz

28

parametr setValue animated nie wykonują animację, ale raczej umożliwia animacja.

Aby uruchomić animację, trzeba użyć UIView.animateWithDuration i przekazać w poleceniu setValue jako animacji:

UIView.animateWithDuration(0.2, animations: { 
    self.mySlider.setValue(0, animated:true) 
}) 
+0

Świetna myśl - niestety, według mojej wiadomości NSLog jest ona tylko raz wywoływana! – slifty

+0

co zrobić, jeśli korzystasz z bloku animacji (patrz edytowana odpowiedź)? był problem z animacją suwaka we wczesnych wersjach, nie wiem, czy to może być problem. Czy to nie działa zarówno w systemie iOS 7, jak i iOS 8? – f3n1kc

+0

Smutne, że to się stało, ponieważ to naprawia problem. Wygląda na to, że użycie 'setValue: animated:' w IBAction suwaka nie powoduje animacji, co jest prawdopodobnie błędem UIKit. –

0

Rozwiązanie @Slifty jest poprawna. Ale jeśli chcesz, aby UISlider był tak gładki jak defauft, możesz zmniejszyć animację czasu do poniżej 0,2. Może działać tak, jak 0.1/2 lub 0.1/3.

Powiązane problemy