Установка animationDidStopSelector: на делегате анимации UIVIEW

Я думаю, что делал эту несправедливость в течение прошлого года, с половиной из моего опыта разработки iPhone... Я мог использовать некоторое хорошо осведомленное разъяснение!

Как Вы можете или не можете знать, свойства UIView могут быть анимированы довольно легко с помощью beginAnimations:forContext: метод, и оборачивает его a commitAnimations звонить.

Можно также установить делегата анимации для выполнения действий, когда определенные части анимации происходят, такие как запуск, заканчиваясь и т.д.

Я использовал анимации UIView в своем коде в течение долгого времени и никогда не имел серьезных проблем, но я только что столкнулся с разделом документов, которые я, должно быть, пропустил.

Документация для UIView's setAnimationDidStopSelector: состояния, которые любой селектор передал в этот метод, должны иметь форму:

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context;

Я не делал этого вообще. Я устанавливал простой doThis и doThat введите селекторы, которые не берут параметров.

То, что я делал приемлемый? Я должен переписать весь свой код для использования зарегистрированной формы? Или то, что форма просто для удобства, если я должен знать, должна ли анимация, завершенная прежде чем быть остановленным или, была передать некоторые зависящие от контекста данные методу?

5
задан Jasarien 19 February 2010 в 16:14
поделиться

1 ответ

Это приемлемо.


На уровне сборки вызов метода Objective-C

id something = [obj method:arg0 and:arg1 also:arg2 asWellAs:arg3];

будет выглядеть так ( не фактический код ARM):

load  r0      <- obj
load  r1      <- @selector(method:and:also:asWellAs:)
load  r2      <- arg0
load  r3      <- arg1
load  [sp, 0] <- arg2
load  [sp, 4] <- arg3
call          objc_msgSend
store r0      -> something

где objc_msgSend сохранит все регистры, найдите -method: and: also: asWellAs: , и перейти к нему. В рамках -метода:… компилятор свяжет параметры обратно с регистрами, то есть

store r0        -> self
store r1        -> _cmd
store r2        -> param0
store r3        -> param1
store [sp, ?]   -> param2
store [sp, ?+4] -> param3
// rest of execution

Что произойдет, если ваш метод только -doThis или -doThat ]?

store r0        -> self
store r1        -> _cmd
// rest of execution

Параметров не будет, поэтому регистры r2, r3 и значения стека можно изменить. Другими словами, компилятор / среда выполнения просто проигнорируют дополнительные параметры .

Проблемы возникнут только в том случае, если вы возьмете слишком много параметров.

9
ответ дан 14 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: