Краткий ответ: вы получаете неявную анимацию, когда обновляете неявно анимируемое свойство слоя (backgroundColor
в этом случае).
Эта 0,25-секундная анимация имеет приоритет над вашей явной анимацией, потому что она добавляется впоследствии. Эта неявная анимация происходит из-за того, что слой является «автономным» (т. Е. Он не принадлежит представлению).
Чтобы избавиться от этой неявной анимации, вы можете создать CATransaction
и отключить действия только для области, которая обновляет свойство слоя:
CATransaction.begin()
CATransaction.setDisableActions(true)
redLayer.backgroundColor = UIColor.blue.cgColor
CATransaction.commit()
В качестве альтернативы отключению неявной анимации вы также можете обновить слой перед добавлением явной анимации. У меня есть довольно подробное объяснение последствий обновления слоя до или после добавления анимации в этом ответе , если вы хотите узнать больше об этом.