Другой синтаксис Objective C для вызова функции - PullRequest
0 голосов
/ 25 января 2012
[UIView animateWithDuration:1.0 animations:^(void) {
    im.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
    [UIView animateWithDuration:1.0 delay:1.0 options:UIViewAnimationCurveEaseOut animations:^(void) {
        im.alpha = 0.0;
    } completion:^(BOOL finished) {
        [im removeFromSuperview];
    }];    
}];

Код для анимации UIImageView, который я знаю; Я хочу знать механизм вызова, так как я не видел такой вызов функции в первый раз.

В основном, Что является ^(void) и , почему im.transform = CGAffineTransformIdentity; передано ему?

Я просмотрел документы Apple, чтобы найти что-либо, связанное с этим вызовом функции, и я тоже понял, но я не получил от этого никакой идеи; или я мог быть не в том разделе.

Может ли кто-нибудь здесь привести меня к этому?

1 Ответ

4 голосов
/ 25 января 2012

Это называется блоком и было представлено в iOS 4 и Mac OS X 10.6.

Вот несколько ссылок, где вы можете узнать о них больше:

Приведенный выше пример должен выглядеть следующим образом:

// Start an animation over the next 1 second 
[UIView animateWithDuration:1.0 animations:^(void) {

    // For this animation, animate from the current value of im.transform back to the identity transform
    im.transform = CGAffineTransformIdentity;

} completion:^(BOOL finished) {  // At the completion of the first animation...

    // Wait 1 second, then start another 1-second long animation
    [UIView animateWithDuration:1.0 delay:1.0 options:UIViewAnimationCurveEaseOut animations:^(void) {

        im.alpha = 0.0;  // Fade out im during this animation

    } completion:^(BOOL finished) {  // When you complete this second animation
        [im removeFromSuperview];  // Remove im from its superview
    }];    
}];

Таким образом, у вас будетодна секунда, когда им оживляется удаление его преобразования, задержка в одну секунду, а затем затухание им в одну секунду.

...