0

我正在尝试创建一个可拖动的图像,但我试图将其拖动到一个小方块内而不是全屏。有人可以告诉我哪里出错了吗?我已将到目前为止的代码放在下面:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [[event allTouches] anyObject];
    if([touch view] == dot) {
        CGPoint location = [touch locationInView:self.view];
        dot.center = location;
        if (location.x >10) {
            location.x =10;
        } else if (location.x <10) {
            location.x = 10;
        }
        if (location.y >20) {
            location.y =20;
        } else if (location.y < 20) {
            location.y = 20;
        }      
    }
}
4

2 回答 2

3

location您在对其进行更改之前 进行分配。

首先应用您的限制,location然后将其分配给dot.

此外,您显示的限制会将您的位置锁定为 10,20,因为您不允许它超过 10 或小于 10。同样与 20。

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [[event allTouches] anyObject];
    if([touch view] == dot) {
        CGPoint location = [touch locationInView:self.view];
        location.x = MIN(MAX(location.x, 0),10);
        location.y = MIN(MAX(location.y, 0),20);
        dot.center = location;     
    }
}
于 2012-06-15T14:54:55.727 回答
1

我最近实现了一个像这样的图像拖动功能。我使用 PAN Gesture 移动图像,生成两个 CGFloats“endPointX 和 endPointY”。在下面的注释“留在屏幕上检查”和“结束留在屏幕上检查”之间的代码中,我检查这些是否在屏幕上。如果不是,我会调整它们以防止图像移出屏幕。

我希望这会有所帮助。如果您想在整个屏幕的一小部分内移动图像,那么我会将图像添加到持有人子视图中,然后改为检查持有人视图 .bounds.size.width/height 上方。

CGFloat endPointX = translatedPoint.x + (.35*[(UIPanGestureRecognizer*)sender 
velocityInView:self.view].x);

CGFloat endPointY = translatedPoint.y + (.35*[(UIPanGestureRecognizer*)sender velocityInView:self.view].y);

// Stay on the screen check

if(endPointX < 0) {

    endPointX = 0;

} else if(endPointX > self.view.bounds.size.width) { 

    endPointX = self.view.bounds.size.width;            

}

if(endPointY < 0) {

    endPointY = 0;

} else if(endPointY > self.view.bounds.size.height) {               

    endPointY = self.view.bounds.size.height; 

}

// End of the Stay on Screen check

[UIView beginAnimations:nil context:NULL];

[UIView setAnimationDuration:.35];

[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

[[sender view] setCenter:CGPointMake(endPointX, endPointY)];

[UIView commitAnimations];
于 2012-06-15T14:49:24.577 回答