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) равен нулю.