【问题标题】:I need help with Animation Callbacks (iPhone)我需要有关动画回调 (iPhone) 的帮助
【发布时间】:2010-09-29 08:44:45
【问题描述】:

我正在 iPhone 中创建一个应用程序,其中有几个 UIView 和图层。我正在使用 CAKeyframeAnimation 类做一些动画,由于动画必须被链接,我已经覆盖了 UIView 中的 animationDidStop 方法。

我得到了正确的回调,但是我不知道如何找到结束的动画以便开始下一个动画。回调函数的唯一参数是 CAAnimation 对象和布尔值。

我可以通过在类中设置一个属性并为我使用的各种动画使用一个枚举来解决这个问题。但是我只是想知道回调中是否有任何内置属性,我可以在 CAKeyframeAnimation 对象中设置这些属性,然后在回调中引用相同的属性。

任何帮助将不胜感激!

【问题讨论】:

    标签: iphone animation


    【解决方案1】:

    您可以为动画指定一个名称并在您的委托方法中读取它。

    [animation setValue:"firstAnimation" forKey:@"name"];
    

    ...

    - (void)animationDidStop:(CAAnimation*)animation finished:(BOOL)finished {
      if([[animation valueForKey:@"name"] isEqual:@"firstAnimation"] && finished) {
        ...
      }
    }
    

    【讨论】:

    • 我无法编辑它,但它需要在“firstAnimation”之前@到行[animation setValue:"firstAnimation" forKey:@"name"];
    【解决方案2】:

    我知道您说您正在使用 CAKeyframeAnimations,但是如果您想要 UIView 属性(原点、边界、alpha 等)的简单动画,您可以将属性的更改包装在 begin/commit 中块并指定在动画完成时调用的委托方法。只要委托方法接受三个参数,您就可以随意调用它。例如:

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:ANIMATIONDURATIONINSECONDS];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(yourAnimationHasFinished:finished:context:)];
    // Change property or properties here
    [UIView commitAnimations];
    

    会导致方法

    - (void)yourAnimationHasFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context;
    

    被调用。这允许的任意命名将为您提供一种分离处理以完成不同动画的方法。对于简单的动画,我更喜欢这个。

    为了处理直接与 CALayers 交互的更复杂的动画,animationDidStop:finished: 委托方法确实返回已完成的动画对象。如果您正在创建一个实例作为多个动画的委托,您可以创建一个动画和 NSNumbers 的 NSMutableDictionary 以在 animationDidStop:finished: 方法中的 switch 语句中使用。在创建 CAKeyframeAnimation 时,使用 setObject:forKey: 将其分配给其匹配编号,然后使用 objectForKey: 在完成方法中找到与该动画对应的编号并将其输入到 switch 语句中。

    【讨论】:

      猜你喜欢
      • 2020-06-21
      • 2010-12-13
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      相关资源
      最近更新 更多