AnimateWithDuration завершается немедленно

Я знаю, что тонна людей задала тот же вопрос, но ни одно из предлагаемых решений не кажется актуальным, поэтому я снова спрашиваю: У меня есть следующий код:

UIImageView *moneyHolder = [[UIImageView alloc] initWithImage:moneyImage];    
if([paymentMethod.viewed intValue] == 0){
            //CGRect targetFrame = CGRectMake(0, cell.frame.size.height/2-3, cell.frame.size.width, targetHeight);
            CGRect targetFrame = moneyHolder.frame;
            targetFrame.origin.y = cell.frame.size.height/2-3;
            NSLog(@"animating");
            [UIView animateWithDuration:2
                                  delay:0
                                options: UIViewAnimationCurveEaseOut
                             animations:^{
                                 moneyHolder.frame = targetFrame;
                             } 
                             completion:^(BOOL finished){
                                 NSLog(@"done");
                             }
            ];
        }

Что я хотел бы ДУМАТЬ, должен анимировать мой кадр moneyHolder. К сожалению, это, похоже, происходит немедленно, а не с продолжительностью 2 секунды. Я могу проверить это с помощью временных меток из моего журнала:

2012-05-11 03: 41: 50.102 AgilePoet [5824: 15203] анимация
2012-05-11 03: 41: 50.116 AgilePoet [5824: 15203] сделано

Есть ли у кого-нибудь мысли о том, почему это может произойти? Все остальные вопросы по этому предмету были сосредоточены на том, что свойство не является анимированным, но я знаю, что кадр изображения является одинарным. Единственное, что я могу думать, это то, что этот код написан внутри моего

-tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath method. 

Спасибо заранее!

Ответы

Ответ 1

Чтобы процитировать документы:

Рамка

Рамка рамки, которая описывает местоположение видов и размер в системе координат супервизора.

Изменения этого свойства могут быть анимированы. Однако, если преобразование свойство содержит не идентичное преобразование, значение кадра свойство undefined и его не следует изменять. В этом случае вы может переместить представление с использованием свойства центра и отрегулировать размер используя свойство bounds.

Если вы или какой-либо другой код изменили матрицу преобразования для представления, изменения в свойстве frame не работают должным образом.

Вы должны изменить свойство центра (чтобы переместить представление) и ограничить свойство (чтобы изменить его размер). Эти свойства ведут себя так, как ожидалось.

Ответ 2

в моем случае анимация вызвана методом viewdidload. Не делай этого. Попробуйте в viewWillAppear

Ответ 3

Еще одна вещь, которая заставляет анимацию завершать сразу, - это то, что объект, который анимируется (UIImageView в моем случае), равен нулю.