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. 

Заранее спасибо!

3 ответа

Решение

Цитировать документы:

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

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

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

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

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

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

Другие вопросы по тегам