animateWithDuration立即完成

时间:2012-05-11 08:51:43

标签: objective-c ios uiview uiimageview core-animation

我知道有很多人提出了同样的问题,但提议的解决方案似乎都不相关,所以我再问一遍: 我有以下代码块:

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. 

提前致谢!

3 个答案:

答案 0 :(得分:18)

引用文档:

  

frame框架矩形,描述视图的位置和   超视图坐标系中的大小。

     

可以设置对此属性的更改。但是,如果改造   property包含一个非标识变换,即帧的值   属性未定义,不应修改。在那种情况下,你   可以使用center属性重新定位视图并调整大小   使用bounds属性。

如果您或其他代码更改了视图的转换矩阵,则对帧属性的更改将无法按预期工作。

您应该改变中心属性(移动视图)和bounds属性(改变它的大小)。这些属性的行为符合预期。

答案 1 :(得分:4)

在我的案例中,在viewdidload方法中调用动画。不要这样做。试试viewWillAppear

答案 2 :(得分:0)

导致动画立即完成的另一件事是,动画对象(在我的情况下是UIImageView)是否为零。