0

画面の周りにオブジェクトをドラッグする必要があります。問題は、このオブジェクトをドラッグすると、iPhone/iPad の画面からドラッグされる可能性があることです。この状況を回避するにはどうすればよいですか?

  float startingX;
    float startingY;


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    UITouch *touch = [touches anyObject];
    startingX = [touch locationInView:self.view].x;
    startingY = [touch locationInView:self.view].y;
}




- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{


    CGPoint currentPoint = objectView.frame.origin;
    float xForView, yForView;
    UITouch *touch = [touches anyObject];
    float newX = [touch locationInView:self.view].x;
    float deltaX;
    if(startingX > newX){
        deltaX = startingX - newX;
        xForView = currentPoint.x - deltaX;
    } else if(newX > startingX){
        deltaX = newX - startingX;
        xForView = currentPoint.x + deltaX;
    } else xForView = currentPoint.x;

    float newY = [touch locationInView:self.view].y;
    float deltaY;
    if(startingY > newY){
        deltaY = startingY - newY;
        yForView = currentPoint.y - deltaY;
    } else if(newY > startingY){
        deltaY = newY - startingY;
        yForView = currentPoint.y + deltaY;
    } else yForView = currentPoint.y;

    CGRect newFrame = CGRectMake(xForView, yForView, objectView.frame.size.width, objectView.frame.size.height);
    objectView.frame = newFrame;

    startingX = newX;
    startingY = newY;
}
4

2 に答える 2

0

ビューのプロパティの原点frameは、そのスーパービューの座標系にあります。またcenter、ビューを移動するだけの場合は、ビューのプロパティを設定することもできます (スーパービューの座標系にもあります)。これを行うアルゴリズムは次のとおりです。touchesBegan:メソッドで座標を取得し、ビューの中心に応じてオフセットを計算します。次に touchesMoved で、オフセットを考慮してビューの中心を設定します。

于 2012-04-23T07:44:14.683 に答える
0

次のような touchmove 関数にハンドラーを追加できます。

    if(currentPoint.x < 0) //which means it already moved out of your window 
{   
[yourObject setFrame:CGRectMake(0, currentPoint.y, yourObject.frame.size.width, yourObject.frame.size.height)];
} 
if(currentPoint.y < 0) //preventing your object goes upward beyond window 
{   
[yourObject setFrame:CGRectMake(currentPoint.x, 0, yourObject.frame.size.width, yourObject.frame.size.height)];
}

また、if(currentPoint.y > self.view.frame.size.width) と高さでも同様に行い、オブジェクトが下側と右側のウィンドウを超えないようにします。

幸運を

于 2012-04-23T09:21:48.600 に答える