2015-03-09 17 views
5

z jakiegoś powodu nie działa dla mnie:Jak animować zmianę borderColor w Swift

let color = CABasicAnimation(keyPath: "borderColor") 
color.fromValue = sender.layer.borderColor; 
color.toValue = UIColor.redColor().CGColor; 
color.duration = 2; 
color.repeatCount = 1; 
sender.layer.addAnimation(color, forKey: "color and width"); 

ja nie dostaję animacja wystąpić.

+0

jaki wynik daje ten kod? – roo2

+0

Co nie działa? Dołącz komunikat o błędzie i oczekiwany wynik do edycji swojego pytania (nie komentuj komentarzy i nie uwzględniaj w trakcie edycji ** edycji ** lub ** aktualizacji **, widzimy, co zmieniło się z edycji historia). – Anthon

Odpowiedz

1

Nie wiem dlaczego, ale z jakiegoś powodu powołania:

color.fromValue = sender.layer.borderColor 

nie działa. Kolor nie jest poprawnie czytany lub coś. Zmieniłem go na:

let color = CABasicAnimation(keyPath: "borderColor"); 
color.fromValue = UIColor.greenColor().CGColor; 
color.toValue = UIColor.redColor().CGColor; 
color.duration = 2; 
color.repeatCount = 1; 
sender.layer.addAnimation(color, forKey: "color and width"); 

A potem wszystko zaczęło działać zgodnie z oczekiwaniami.

6

Musisz użyć tej samej nazwy klucza. Zapomniałeś również dodać szerokość i kolor ramki do warstwy przed jej animacją. Spróbuj tak:

let color = CABasicAnimation(keyPath: "borderColor") 

@IBAction func animateBorder(sender: AnyObject) { 
    color.fromValue = UIColor.greenColor().CGColor 
    color.toValue = UIColor.redColor().CGColor 
    color.duration = 2 
    color.repeatCount = 1 
    sender.layer.borderWidth = 2 
    sender.layer.borderColor = UIColor.greenColor().CGColor 
    sender.layer.addAnimation(color, forKey: "borderColor") 
} 
+0

Po zabawie z nim trochę więcej. Myślę, że problemem jest fromColor. To nie jest czytanie sender.layer.borderColor. –

+0

color.fromValue = sender.layer.borderColor również działa dla mnie tutaj –

+0

Problemem była kluczowa nazwaKey: "kolor i szerokość". Jeśli chcesz animować kolor i obramowanie, musisz utworzyć jedną CABasicAnimation dla każdej właściwości (borderColor i borderWidth) –