animateWithDuration立即完成

akh*_*lsa 16 core-animation objective-c uiview uiimageview ios

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

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");
                             }
            ];
        }
Run Code Online (Sandbox Code Playgroud)

我认为应该动画我的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. 
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Dun*_*n C 18

引用文档:

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

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

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

您应该改变中心属性(移动视图)和bounds属性(改变它的大小).这些属性表现如预期.

  • @GregMaletic,在视网膜设备上这不是问题,因为你的坐标实际上是"点"坐标,而在视网膜设备上,一个点是2个屏幕像素.Retina设备能够在1/2点坐标处显示清晰图像. (2认同)

Rom*_*man 5

就我而言,动画在viewdidload方法中调用。不要这样 试穿viewWillAppear