代码之家  ›  专栏  ›  技术社区  ›  GuybrushThreepwood

Calayer的这个隐式动画代码缺少什么?

  •  0
  • GuybrushThreepwood  · 技术社区  · 14 年前

    我正试图从一本书中得到以下代码。它为uiImageView(称为“鸡肉”)的层设置动画:

    [CATransaction setValue:kCAMediaTimingFunctionEaseInEaseOut forKey:kCATransactionAnimationTimingFunction];
    [CATransaction setValue:[NSNumber numberWithFloat:1.0] forKey:kCATransactionAnimationDuration];
    theChicken.position = CGPointMake(225, 144);
    

    问题是这段代码没有动画效果。它只是将小鸡移动到225144,完全没有动画(它只是像魔法一样传送到那里)。有人能帮我更正代码吗?

    事先谢谢,

    马丁

    1 回复  |  直到 14 年前
        1
  •  1
  •   Ben    14 年前

    如果你把它包起来会怎么样:

    [CATransaction begin];
    
    [CATransaction setValue:kCAMediaTimingFunctionEaseInEaseOut forKey:kCATransactionAnimationTimingFunction];
    [CATransaction setAnimationDuration:1.0];
    theChicken.position = CGPointMake(225, 144);
    
    [CATransaction commit];
    

    如果它仍然不起作用,那么它可能与层代理有关。这层是子层吗?我认为代理在根层上设置为nil,这将产生此影响。

    您可以使用uiview动画代替:

    [UIView beginAnimations:@"anim1" context:nil];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    
    theChicken.position = CGPointMake(225, 144);
    
    [UIView commitAnimations];