如何在iPhone中使用CALayer和CGPath的动画中获取位置

时间:2011-04-20 06:32:54

标签: iphone objective-c calayer cgpath cakeyframeanimation

 hI,

 I am workng on animation using CALayer and CAPath.

 Here I am animating an Image from top to bottom of screen.I gave starting and ending position for
 the animation.Now, I want to get position  during the animation.

Sample Code:

   - (void)onTimer
    {

    CGImageRef imageRef = [[UIImage imageNamed:@"apple.png"] CGImage];
int startX                      = round(random() % 460);
double speed     = 1 / round(random() %100) + 1.0;

layer          = [CALayer layer];
layer.name              = @"layer";
layer.contents          = (id)imageRef; // cached image
layer.frame             = CGRectMake(startX, self.view.frame.size.height+10,    CGImageGetWidth(imageRef), CGImageGetHeight(imageRef));

[mView.layer addSublayer:layer];


 path = CGPathCreateMutable(); 
CGPathMoveToPoint(path, NULL, startX, -100);
CGPathAddLineToPoint(path, NULL, startX, self.view.frame.size.height+10);



CAKeyframeAnimation *animation= [CAKeyframeAnimation animationWithKeyPath:@"position"];

animation.delegate=self;

animation.duration= 10*speed;
animation.autoreverses=NO;
animation.path=path;
animation.repeatCount = 0;
animation.removedOnCompletion=YES;
animation.calculationMode = kCAAnimationLinear;

[layer addAnimation:animation forKey:@"position"];


CGPoint point= CGPathGetCurrentPoint(path);


   }

    In this I used "CGPathGetCurrentPoint" method but it did not work. Also used 
     presentationLayer method of CALayer but uit also did not work in this case.

     Can anyone suggest the code to get the position during animation
    thanks in advance

2 个答案:

答案 0 :(得分:2)

通过查看图层表示层上的属性,您可以获得动画期间在屏幕上看到的内容的值。

答案 1 :(得分:1)

Core Animation不是为此而设计的。它的工作是为你处理属性动画,而不是让你接触它。

如果您想在动画期间知道它的位置,那么您需要在没有Core Animation的情况下自己完成所有动画。

CGPathGetCurrentPoint()是一个访问CGPath个实例的控制点的函数,而不是核心动画关键帧动画路径的控制点。