 
 public extension UITextField {
 	public func animate(text: String?, block: ActionBlock? = nil) {
+		guard self.text != text else {
+			return
+		}
+		
 		UIView.transition(with: self, duration: animationConstant, options: .transitionCrossDissolve, animations: {
 			self.text = text
+		}, completion: { finished in
+			block?()
+		})
+	}
+	
+	public func animate(enabled: Bool, block: ActionBlock? = nil) {
+		guard self.isEnabled != enabled else {
+			return
+		}
+		
+		UIView.transition(with: self, duration: animationConstant, options: .transitionCrossDissolve, animations: {
+			self.isEnabled = enabled
 		}, completion: { finished in
 			block?()
 		})


public extension UIButton {
	public func animate(enabled: Bool, block: ActionBlock? = nil) {
		UIView.transition(with: self, duration: animationConstant, options: .transitionCrossDissolve, animations: {
			self.isEnabled = enabled
		}, completion: { finished in


public extension UIImageView {
	public func animate(image: UIImage?, block: ActionBlock? = nil) {
		guard self.image != image else {
			return
		}
		
		UIView.transition(with: self, duration: animationConstant, options: .transitionFlipFromTop, animations: {
			self.image = image
		}, completion: { finished in
