#swift #cabasicanimation
#быстрый #cabasicanimation
Вопрос:
Согласно документам, способ повторить CABasicAnimation навсегда — это установить для него repeatCount
значение HUGE_VALF
.
Но в Swift HUGE_VALF
это приводит к ошибке компиляции. Swift, похоже, не знает о стандартной библиотеке (или где бы эта константа ни находилась).
Что мне теперь делать?
Ответ №1:
Установите значение repeatCount
Float.infinity
. Это компилируется и работает.
По всей вероятности, HUGE_VALF
это была унаследованная ценность в любом случае.
Тем не менее, немного удивительно, что эти числовые имена констант не видны Swift. Я пробовал импортировать <stdlib.h>
в заголовок bridging, но это не помогло.
Но, пожалуйста, посмотрите сейчас ответ Мартина Р. С тех пор, как я опубликовал свой ответ, Apple явно указала свой предпочтительный ответ: использовать .greatestFiniteMagnitude
. Это почти то же самое, что и, .infinity
но не совсем!
Комментарии:
1. Хорошая находка. Я полагаю, вы имели
repeatCount
в виду как вопросы, так и ответы?2. Я не это имел в виду, в том смысле, что мой код фактически устанавливал
repeatDuration
значениеHUGE_VALF
. Но я, вероятно, должен был это иметь в виду! Я отрегулирую.3.
HUGE_VALF
определяется в<math.h>
. Но даже если этот файл будет добавлен в заголовочный файл bridging, эта константа не будет доступна Swift.4. @MartinR И почему это так? Вот чего я не понимаю. Мне просто повезло, что я нашел другой подход…
Ответ №2:
Текущая документация для repeatCount
свойства CAMediaTiming
состояний:
Установка этого свойства в
greatestFiniteMagnitude
значение приведет к повторению анимации навсегда.
И это компилируется без проблем:
let ba = CABasicAnimation()
ba.repeatCount = .greatestFiniteMagnitude
Причина, по которой HUGE_VALF
она не импортируется в Swift, заключается в том, что
она определена как «нетривиальный» макрос в <math.h>
:
# define HUGE_VALF __builtin_huge_valf()
Ответ №3:
Я использую «ОГРОМНОЕ» значение. это переменная build_in, доступная только для чтения;