2017-06-26 137 views
1

我有UIButtonmainStoryboard。它有白色UIColor和橙色突出顯示的顏色。直接從高亮顏色切換顏色到另一種顏色

我想在選擇按鈕後立即更改此按鈕的顏色。

理想的結果

White(default) -> orange(highlighted) -> green(animated) -> white(default) 

然而,對於下面的代碼之前,從橙色到綠色的顏色變化就變成白色不久。

當前結果

White(default) -> orange(highlighted) -> White(default) -> green(animated) -> white(default) 

我怎麼能直接從突出橙色到綠色切換顏色?

UIView.animate(withDuration:0, animations: {() -> Void in 
     cell.buttons[index].backgroundColor = UIColor.green 

    }) { (Bool) -> Void in 
     UIView.animate(withDuration: 0.5, animations: {() -> Void in 
      cell.buttons[index].backgroundColor = UIColor.green 

     }, completion: { (Bool) -> Void in 
      UIView.animate(withDuration: 0, animations: {() -> Void in 
       cell.buttons[index].backgroundColor = UIColor.white 
      }, completion:nil) 
     }) 
    } 
+0

你的UIButton的類型是什麼?確保它在故事板中設置爲自定義。 –

+0

你用什麼方法爲你的按鈕獲得橙色的「高亮顏色」? – DonMag

回答

1

您的動畫代碼看起來不錯,但動畫是兩個狀態之間的事務,它需要時間(持續時間)。所以儘量不要持續時間爲0秒的動畫,因爲在這種情況下,動畫是無用的。

你的問題似乎有按鈕偵聽器的錯誤。點擊按鈕即可將顏色更改爲橙​​色,即touchDown。然後,你要儘快釋放按鈕做顏色變化,這是touchUpInside

所以嘗試了這一點,該代碼添加到您的viewDidLoad

yourButton.addTarget(self, action:#selector(btnShowPasswordClickHoldDown), for: .touchDown) 

yourButton.addTarget(self, action:#selector(btnShowPasswordClickRelease), for: .touchUpInside) 

,然後用有效的持續時間

添加動畫
func btnShowPasswordClickHoldDown(){ 
    UIView.animate(withDuration: 0.5, animations: {() -> Void in 
     self.yourButton.backgroundColor = UIColor.orange 
    }, completion:nil) 
} 

func btnShowPasswordClickRelease(){ 
    UIView.animate(withDuration: 0.5, animations: {() -> Void in 
     self.yourButton.backgroundColor = UIColor.green 

    }, completion: { (Bool) -> Void in 
     UIView.animate(withDuration: 0.5, animations: {() -> Void in 
      self.yourButton.backgroundColor = UIColor.white 
     }, completion:nil) 
    }) 
} 
相關問題