1

我使用以下方法绘制了一条弧线:

CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 4.0);
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
    CGContextMoveToPoint(context, 0,300);
    CGContextAddArcToPoint(context, 125,300, 125,480, 180);//last value is the radius
    CGContextStrokePath(context);

我的目标是将 UImageView 放置在此弧的起始坐标处,并使用 UIPanGestureRecognizer 将其沿此弧滑动。现在我正在使用这条线获得手势翻译:CGPoint translate = [sender translationInView:self.view];sender是一种UIPanGestureRecognizer类型。

只要translate.x向正方向移动,图像就应该沿着弧线滑动(------->

目前我的图像从坐标开始(0,300),这与弧的起始坐标相同。图像响应 x 轴上的手势,但 y 值保持在300。如何保持对点的限制translate,使其遵循我创建的弧的坐标?

这是我目前拥有的,它所做的只是在 x 轴上滑出:

-(void)slide:(UIPanGestureRecognizer *)sender
{
    if([sender state] == UIGestureRecognizerStateBegan)
    {

        startPos = CGPointMake(0, 300);

        minPos = CGPointMake(0, 300);

        maxPos = CGPointMake(125, 480);

    }

    else if ([sender state] == UIGestureRecognizerStateChanged)
    {
        CGPoint translate = [sender translationInView:self.view];
        CGPoint newPos;

        newPos = CGPointMake(startPos.x + translate.x, startPos.y);

        //CGPoint newYPos = CGPointMake(startPos.x + translate.x, <#CGFloat y#>)

        if(newPos.x < minPos.x)
        {
            newPos.x = minPos.x;
            translate = CGPointMake(newPos.x - startPos.x, minPos.y);
        }
        if(newPos.x >= maxPos.x)
        {
            newPos.x = maxPos.x; 
            translate = CGPointMake(newPos.x - startPos.x, maxPos.y);
        }

        [sender setTranslation:translate inView:self.view];

        self.handle.center = newPos; //handle is a UIImageView
    }
}

我认为问题在于if我用来限制 x 值的两个语句。我只是不确定如何限制 x&y 值CGPoint translate以遵循设定曲线。

非常感谢任何帮助。

4

0 回答 0