我使用以下方法绘制了一条弧线:
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
以遵循设定曲线。
非常感谢任何帮助。