Objective-C沿曲线路径移动对象

Objective-C沿曲线路径移动对象,objective-c,caanimation,Objective C,Caanimation,我已经研究了这个问题的其他答案,特别是布拉德·拉森的答案,但我仍然没有得到任何结果。我不确定我是否以正确的方式处理这件事。在我的应用程序中,当用户触摸屏幕时,我捕获该点并创建一个从固定点到该触摸点的圆弧。然后我想沿着该弧移动一个UIView 这是我的密码: ViewController.m //方法“射击”对象-KIP_投射物创建弧,KIP_角色创建我想要沿弧移动的对象 ... //get arc for trajectory KIP_Projectile* vThisProjecti

我已经研究了这个问题的其他答案,特别是布拉德·拉森的答案,但我仍然没有得到任何结果。我不确定我是否以正确的方式处理这件事。在我的应用程序中,当用户触摸屏幕时,我捕获该点并创建一个从固定点到该触摸点的圆弧。然后我想沿着该弧移动一个UIView

这是我的密码:

ViewController.m

//方法“射击”对象-KIP_投射物创建弧,KIP_角色创建我想要沿弧移动的对象

...

//get arc for trajectory
    KIP_Projectile* vThisProjectile = [[KIP_Projectile alloc] initWithFrame:CGRectMake(51.0, fatElvisCenterPoint-30.0, touchPoint.x, 60.0)];
    vThisProjectile.backgroundColor = [UIColor clearColor];
    [self.view addSubview:vThisProjectile];

...

 KIP_Character* thisChar = [[KIP_Character alloc] initWithFrame:CGRectMake(51, objCenterPoint-5, imgThisChar.size.width, imgThisChar.size.height)];
    thisChar.backgroundColor = [UIColor clearColor];
    thisChar.charID = charID;
    thisChar.charType = 2;
    thisChar.strCharType = @"Projectile";
    thisChar.imgMyImage = imgThisChar;
    thisChar.myArc = vThisProjectile;
    [thisChar buildImage];
    [thisChar traceArc];
在KIP_射弹中,我使用以下代码构建弧:

- (CGMutablePathRef) createArcPathFromBottomOfRect : (CGRect) rect : (CGFloat) arcHeight {

    CGRect arcRect = CGRectMake(rect.origin.x, rect.origin.y + rect.size.height - arcHeight, rect.size.width, arcHeight);

    CGFloat arcRadius = (arcRect.size.height/2) + (pow(arcRect.size.width, 2) / (8*arcRect.size.height));
    CGPoint arcCenter = CGPointMake(arcRect.origin.x + arcRect.size.width/2, arcRect.origin.y + arcRadius);

    CGFloat angle = acos(arcRect.size.width / (2*arcRadius));
    CGFloat startAngle = radians(180) + angle;
    CGFloat endAngle = radians(360) - angle;

    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddArc(path, NULL, arcCenter.x, arcCenter.y, arcRadius, startAngle, endAngle, 0);

    return path;

}


- (void)drawRect:(CGRect)rect {

    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    _myArcPath = [self createArcPathFromBottomOfRect:self.bounds:30.0];

    CGContextSetLineWidth(currentContext, 1);
    CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetStrokeColor(currentContext, red);
    CGContextAddPath(currentContext, _myArcPath);
    CGContextStrokePath(currentContext);


}
很好。电弧在屏幕上以红色笔划显示

在KIP_字符中,已经传递了它的相关弧,我正在使用此代码,但没有得到任何结果

- (void) traceArc {

    CGMutablePathRef myArc = _myArc.myArcPath; 

    // Set up path movement
    CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    pathAnimation.calculationMode = kCAAnimationPaced;
    pathAnimation.fillMode = kCAFillModeForwards;
    pathAnimation.removedOnCompletion = NO;
    pathAnimation.path = myArc;
    CGPathRelease(myArc);

    [self.layer addAnimation:pathAnimation forKey:@"savingAnimation"];

}

这里的任何帮助都将不胜感激

您的traceArc代码工作正常。也许有些对象(myArc)为零?谢谢,我已经检查了myArc,它有一个值。