我有一个很奇怪的问题。

我认为我正在使用CAKeyframeAnimation制作动画。动画按预期方式工作,但是,一旦激发了委托的animationDidStop:finished方法,则与该视图关联的图层在使用该图层的nil方法进行检查时始终返回animationForKey:

这是问题的说明:

// This is in the view controller
- (void) doAnimation:(id)sender {
    CAKeyframeAnimation *positionAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

    [positionAnimation setValues:arrayOfPoint];
    [positionAnimation setDuration:0.5];
    // ViewController is the delegate and has the animationDidStop:finished: method
    positionAnimation.delegate = self;
    [positionAnimation setValue:@"I am Text" forKeyPath:@"positionAnimation"];

    [someView.layer addAnimation:positionAnimation forKey:@"positionAnimation"];
    someView.layer.position = newPosition;
}


在控制器的其他地方,我定义了animationDidStop:finished:方法,如下所示:

- (void) animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {

        NSArray *array = [someView.layer animationKeys];
        NSString *stringValue = [anim valueForKey:@"positionAnimation"];

        NSLog(@"valueForKey: %@", stringValue);
        // Prints 'I am Text'

        if(anim == [someView.layer animationForKey:@"positionAnimation"]) {
            //THIS NEVER GET CALLED
        }
}


为什么if块永远不会评估为True?为什么[someView.layer animationForKey:@"positionAnimation"]总是nil?此外,stringValue具有正确的数据,但数组也是nil

最佳答案

我只能猜测,但是也许调用方法animationDidStop:finished:时,您的动画已从图层中删除。因此[someView.layer animationForKey:@"positionAnimation"]为零。

希望这会有所帮助

关于iphone - UIView层的animationForKey:始终为零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5646070/

10-10 14:21