我知道有很多人提出了同样的问题,但提议的解决方案似乎都不相关,所以我再问一遍: 我有以下代码块:
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]完成了
有没有人想过为什么会这样?关于这个主题的所有其他问题都集中在不可动画的属性上,但我知道一个imageview框架是有生命力的。我唯一能想到的是这段代码写在我的
中-tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath method.
提前致谢!
答案 0 :(得分:18)
引用文档:
frame框架矩形,描述视图的位置和 超视图坐标系中的大小。
可以设置对此属性的更改。但是,如果改造 property包含一个非标识变换,即帧的值 属性未定义,不应修改。在那种情况下,你 可以使用center属性重新定位视图并调整大小 使用bounds属性。
如果您或其他代码更改了视图的转换矩阵,则对帧属性的更改将无法按预期工作。
您应该改变中心属性(移动视图)和bounds属性(改变它的大小)。这些属性的行为符合预期。
答案 1 :(得分:4)
在我的案例中,在viewdidload方法中调用动画。不要这样做。试试viewWillAppear
答案 2 :(得分:0)
导致动画立即完成的另一件事是,动画对象(在我的情况下是UIImageView)是否为零。