2013-12-16 2 views
2

Протокол CAAction выглядит немного плохо документированным и редко комментируется в книгах и блогах. Аргументы для его единственного метода, runActionForKey:object:arguments:, немного таинственны. По моему опыту, аргумент «object» всегда кажется CALayer, а словарь «аргументов» всегда nil.Какие значения могут использовать CAAction runActionForKey: object: arguments: arguments take?

Похоже, что протокол, возможно, был разработан для использования в нескольких местах в Core Animation, иначе почему бы не определить тип аргумента layer и почему дополнительный словарь не используется? Но, насколько я могу судить, он используется только с CALayer. Это верно? Есть ли у кого-нибудь примеры, когда вышеприведенные выводы неверны?

ответ

1

Нет, CAAction не использовался ни в каких других API. Когда протокол был разработан, он оставался общим, если он стал полезным позже, но ничего не получилось.

Это просто определить и вызвать действия собственного уровня. Надуманный пример может быть отгрузки «MouseDown» действие в хит-тестирование слоя, проходящего какое-то событие конкретных данных:

CALayer *layer = myHitTest(…); 
[[layer actionForKey:@“mouseDown”] 
runActionForKey:@“mouseDown” object:layer arguments:@{…}]; 

Здесь вы не хотели действия, чтобы добавить анимацию, так бы реализовать протокол CAAction в классе, который обрабатывает события, затем помещает экземпляр этого класса в словарь actions.

1

только фактическое использование CAAction является основой неявных анимации - то есть, в основе механизма, с помощью которого это выражение как

myLayer.position = // ... whatever ... 

волшебно способен анимация изменения слоя в (предполагая, что это не основной основной слой UIView).

Для полного объяснения механизма поиска действия, увидеть мою книгу:

http://www.apeth.com/iOSBook/ch17.html#_actions_2

+0

Спасибо, @ Matt. У меня есть твоя книга, и я уже это читал. (Проводил много времени в этой главе на прошлой неделе!) Я понимаю, как подключиться к механизму поиска; Я просто пытался понять дизайн и использование протокола, учитывая эти странности, о которых я упоминал. Я создал оболочку для создания 'CAAction' с использованием блока и хотел бы, по возможности, упростить интерфейс. –

+0

Спасибо также @matt, но я думаю, что есть два ошибки/упущения в Ch 17: Hooking Into Action Search. Возврат Nil не приводит к отключению анимации для каждого из них, поиск продолжается только в соответствии с [1.2] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreAnimation_guide/ReactingtoLayerChanges/ReactingtoLayerChanges. HTML # // apple_ref/DOC/UID/TP40004514-СН7-SW2). Возвращение NSNull отменяет поиск, хотя (1.3). И, во-вторых, триггеры могут также быть в любом свойстве KVC, даже если те, которые сами по себе не анимируются (одна и та же ссылка). –

+0

@chrisco Я думаю, вы найдете, что поиск правильно описан в текущем выпуске книги. Спасибо за то, что вы используете KVC для запуска поиска; Я посмотрю, как добавить, если есть еще одно издание! – matt