Почему UILabel TextColor анимируется на игровой площадке, а не на устройстве?

Итак, я хочу анимировать изменение цвета текста для некоторых UILabels. У меня был смешанный успех.

Одна из вещей, к которой я в конце концов добрался, это попробовать это на игровой площадке Swift с использованием Xcode 8. В простейшей форме код для запуска анимации:

UIView.animate(withDuration: 5.0) {
    label.textColor = UIColor.red
    label.transform = CGAffineTransform(scaleX: 2, y: 2)
}

Однако, когда я подключаю тот же код к пустому (Swift) проекту iOS, цвет текста больше не анимируется.

Я понимаю, что свойство UILabel textColor не должно быть анимируемым, но здесь оно анимируется. Любые подсказки относительно того, что происходит? Возможно, что-то делать с модулем PlaygroundSupport?

Вот анимация, просматриваемая на игровой площадке:

Анимация детской площадки

Вот анимация, нарисованная в Симуляторе:

Симулятор анимации

РЕДАКТИРОВАТЬ: добавлены анимации, чтобы лучше прояснить, что происходит.


person H2OBorne    schedule 01.11.2016    source источник
comment
Установите цвет фона метки на зеленый и запустите проект. Вы можете увидеть свою метку и убедиться, что на метке есть текст для отображения, затем скопируйте и вставьте свой код в viewDidLoad или внутри действия кнопки и снова запустите проект. .это должно работать....   -  person Joe    schedule 02.11.2016
comment
Если вы все еще не можете найти ответ. Можете ли вы опубликовать свою иерархию StoryBoard ... проблема может быть связана с вашим IBOutlet   -  person Joe    schedule 02.11.2016
comment
@Joe У меня нет проблем увидеть UILabel или даже изменить его. Проблема в том, что он не будет анимироваться. Он изменится только мгновенно, несмотря на то, что анимация должна длиться 5 секунд. Если я добавлю изменение положения/применю преобразование, оно отлично анимируется в течение указанного периода времени. Только часть анимации textColor вызывает все горе. Я не понимаю, почему это работает на игровой площадке, но не в проекте. Я очень обеспокоен / сбит с толку тем, почему это работает и для вас.   -  person H2OBorne    schedule 02.11.2016
comment
Вы пытаетесь использовать симулятор или реальное устройство... но 5 секунд достаточно, чтобы увидеть анимацию или применить к ней некоторую задержку запуска анимации...   -  person Joe    schedule 02.11.2016
comment
проверьте мое обновление....   -  person Joe    schedule 02.11.2016
comment
@Джо, спасибо. Я убрал немного больше двусмысленности из своего вопроса с некоторыми изображениями. Я вижу, у вас та же проблема с textColor, который на самом деле не анимирует изменение цвета.   -  person H2OBorne    schedule 02.11.2016
comment
Код обновлен..........   -  person Joe    schedule 02.11.2016
comment
Посмотрите на мой ответ на этот пост. Может быть, вы лучше поймете, как анимация работает в соответствии с назначенным цветом stackoverflow.com/questions/40318081/   -  person Joe    schedule 03.11.2016
comment
дай мне знать. если у вас все еще есть проблема....   -  person Joe    schedule 04.11.2016


Ответы (1)


Обновленный ответ:

Примечание. Просто скопируйте и вставьте приведенный ниже код в свой viewController, подключите свои IBOutlets и запустите проект.

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBOutlet weak var animateLabel: UILabel!

@IBAction func animateButton(_ sender: UIButton) {
      // textColor will change from blue to red...
      animateLabel.textColor = .blue // set any colour 
      UIView.animate(withDuration: 5.0) {
       self.animateLabel.textColor = UIColor.red
        self.animateLabel.transform = CGAffineTransform(scaleX: 2, y: 2)
    }
  }
}

Выход:

введите описание изображения здесь

Ваш код выглядит нормально. Установите для textColor другой цвет, а не белый. Как вы упомянули. вы запускаете этот код в пустом проекте, что означает, что фон viewController по умолчанию также белого цвета, поэтому вы не можете видеть анимацию. Надеюсь, приведенный ниже код поможет.

 label.textColor = UIColor.red // set to any colour

Примечание. Если вы хотите, чтобы ваш textColor оставался белым, измените цвет фона текста или примените тень к вашей метке, чтобы сделать ее видимой.

//apply backgroundcolor to your label
label.backgroundColor = UIColor.green // set to any colour

// apply shadow to your label
self.label.layer.shadowColor = UIColor.red.cgColor
self.label.layer.shadowOpacity = 1
self.label.layer.shadowOffset = CGSize.zero
self.label.layer.shadowRadius = 10
person Joe    schedule 01.11.2016
comment
Спасибо за ваш вклад. К сожалению, проблема была не в скрытом тексте на заднем плане, я думаю, это было немного двусмысленно при использовании UIColor.white. Я обновил его сейчас (у меня был другой цвет фона). Есть идеи, почему код работает в среде Playground, а не в реальной среде iOS? - person H2OBorne; 01.11.2016
comment
Я уже протестировал ваш код, прежде чем опубликовать свой ответ. Вы поместили свой код внутри своего viewDidLoad или снаружи? Если ваш код внутри вашего viewDidLoad должен работать. Дайте мне знать... - person Joe; 01.11.2016
comment
Нет, это не работает :( Было это как часть жизненного цикла представления, а также прикреплено к кнопке. Пробовал с меткой в ​​​​раскадровке и программным созданием метки. Отлично работает на игровой площадке, а не в Проект iOS. Я мог бы опубликовать больше кода, но единственный другой код — шаблонный. - person H2OBorne; 02.11.2016