как повторить анимацию навсегда в Swift (HUGE_VALF)?

#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, доступная только для чтения;