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 в моем случае), равен нулю.