gpt4 book ai didi

ios - CAAnimation 期间的位置

转载 作者:行者123 更新时间:2023-11-29 03:23:49 26 4
gpt4 key购买 nike

我使用它来沿着路径为对象设置动画。我想知道如何在动画过程中的任意时刻获取对象的位置,以检查与另一个对象的碰撞。任何想法如何去做这个?谢谢。

- (void) animateCicleAlongPath {
//Prepare the animation - we use keyframe animation for animations of this complexity
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

pathAnimation.calculationMode = kCAAnimationCubic;
[pathAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];

pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
pathAnimation.duration = 7.0;

//Lets loop continuously for the demonstration
pathAnimation.repeatCount = 1;

//Setup the path for the animation - this is very similar as the code the draw the line
//instead of drawing to the graphics context, instead we draw lines on a CGPathRef
CGPoint endPoint = CGPointMake(endpointx, endpointy);
CGMutablePathRef curvedPath = CGPathCreateMutable();

CGPathMoveToPoint(curvedPath, NULL,startpointx,startpointy);


// CGPathMoveToPoint(curvedPath, NULL, 10, 10);
CGPathAddQuadCurveToPoint(curvedPath,NULL, controlpointx, controlpointy, endpointx, endpointy);




//Now we have the path, we tell the animation we want to use this path - then we release the path
pathAnimation.path = curvedPath;
CGPathRelease(curvedPath);

//We will now draw a circle at the start of the path which we will animate to follow the path
//We use the same technique as before to draw to a bitmap context and then eventually create
//a UIImageView which we add to our view
UIGraphicsBeginImageContext(CGSizeMake(20,20));
CGContextRef ctx = UIGraphicsGetCurrentContext();
//Set context variables
CGContextSetLineWidth(ctx, 1.5);
CGContextSetFillColorWithColor(ctx, [UIColor greenColor].CGColor);
CGContextSetStrokeColorWithColor(ctx, [UIColor whiteColor].CGColor);
//Draw a circle - and paint it with a different outline (white) and fill color (green)
CGContextAddEllipseInRect(ctx, CGRectMake(1, 1, 18, 18));
CGContextDrawPath(ctx, kCGPathFillStroke);
UIImage *circle = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageView *circleView = [[UIImageView alloc] initWithImage:circle];
circleView.frame = CGRectMake(1, 1, 20, 20);
[throwingView addSubview:circleView];


//Add the animation to the circleView - once you add the animation to the layer, the animation starts
[circleView.layer addAnimation:pathAnimation forKey:@"moveTheSquare"];


}

最佳答案

我相信您有两个问题:

  • 检查碰撞
  • 找出验证碰撞的位置

检查碰撞

CALayer 具有模型层和表示层。表示层为您提供所需的视觉信息。基本上这一层负责获取有关该层在屏幕上的位置的信息。你可以这样做:circleView.layer.presentationLayer

找出验证碰撞的位置

您可以使用每 1/60 秒运行一次的 NSTimer 来执行此操作。但是,这不是一个好的解决方案,因为 NSTimer 仅保证执行选择器所需的最小时间。通过这种方式,您可以在对象已经发生碰撞后检查碰撞的情况。

但是,您可以使用 CADisplayLink 。这样,您将在图层呈现在屏幕上之前接到电话。

关于ios - CAAnimation 期间的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20741057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com