16

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

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. 

提前致谢!

4

3 回答 3

18

引用文档:

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

对此属性的更改可以设置动画。但是,如果 transform 属性包含非恒等变换,则 frame 属性的值是未定义的,不应修改。在这种情况下,您可以使用 center 属性重新定位视图并使用 bounds 属性调整大小。

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

您应该更改 center 属性(以移动视图)和 bounds 属性(以更改其大小)。这些属性的行为符合预期。

于 2012-05-12T02:29:00.800 回答
6

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

于 2015-01-22T13:13:35.383 回答
0

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

于 2013-03-14T23:19:25.943 回答