以下を使用して弧を描きました。
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];
the sender
is a UIPanGestureRecognizer
type.
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 値を制限するために使用する 2 つのステートメントにあると思います。CGPoint translate
x&y 値の両方を設定曲線に従うように制限する方法がわかりません。
どんな助けでも大歓迎です。