Я думаю, что делал эту несправедливость в течение прошлого года, с половиной из моего опыта разработки iPhone... Я мог использовать некоторое хорошо осведомленное разъяснение!
Как Вы можете или не можете знать, свойства UIView могут быть анимированы довольно легко с помощью beginAnimations:forContext:
метод, и оборачивает его a commitAnimations
звонить.
Можно также установить делегата анимации для выполнения действий, когда определенные части анимации происходят, такие как запуск, заканчиваясь и т.д.
Я использовал анимации UIView в своем коде в течение долгого времени и никогда не имел серьезных проблем, но я только что столкнулся с разделом документов, которые я, должно быть, пропустил.
Документация для UIView's setAnimationDidStopSelector:
состояния, которые любой селектор передал в этот метод, должны иметь форму:
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context;
Я не делал этого вообще. Я устанавливал простой doThis
и doThat
введите селекторы, которые не берут параметров.
То, что я делал приемлемый? Я должен переписать весь свой код для использования зарегистрированной формы? Или то, что форма просто для удобства, если я должен знать, должна ли анимация, завершенная прежде чем быть остановленным или, была передать некоторые зависящие от контекста данные методу?
Это приемлемо.
На уровне сборки вызов метода 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 и значения стека можно изменить. Другими словами, компилятор / среда выполнения просто проигнорируют дополнительные параметры .
Проблемы возникнут только в том случае, если вы возьмете слишком много параметров.