如何使对象可拖动?

时间:2014-03-27 16:11:31

标签: ios objective-c uitouch

嘿伙计们,我想知道是否有一个像UIImageView可拖动的对象。我知道UITouch并触及即。

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *drag=[[event allTouches] anyObject];
    player.center=[drag locationInView:self.view];
}

但是通过这种方式,用户可以让对象在屏幕上跳转到他或她触摸屏幕的位置,但我希望用户必须在屏幕上手动拖动对象。

请用代码说明,如果我需要更具体或更清楚,请告诉我......

3 个答案:

答案 0 :(得分:1)

如果您希望用户拖放,首先您必须检查触摸是否在imageview矩形框内。为了改善用户体验,您可以从imageview中心检测触摸偏移;这样做的好地方是the touchesBegan:withEvent:。之后,您必须更改imageview的位置,如下所示:

CGPoint touchOffset; //insert this inside your interface private iVars
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     UITouch *drag=[[event allTouches] anyObject];
     CGPoint touchLocation = [drag locationInView:self.view];
     touchOffset = CGPointMake(player.center.x-touchLocation.x,player.center.y-touchLocation.y)
     if(CGRectContainsPoint(player.frame,touchLocation)
         player.center = CGPointMake(touchLocation.x+touchOffset.x,touchLocation.y+touchOffset.y);
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *drag=[[event allTouches] anyObject];
    CGPoint touchLocation = [drag locationInView:self.view];
    if(CGRectContainsPoint(player.frame,touchLocation)
        player.center = CGPointMake(touchLocation.x+touchOffset.x,touchLocation.y+touchOffset.y);
}

<强> P.S。 - 下次尝试搜索类似的问题......

答案 1 :(得分:1)

你可以这样做:

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

    UITouch *aTouch = [touches anyObject];
    CGPoint location = [aTouch locationInView:self.view];

    if(CGRectContainsPoint(self.playerView.frame,location)) {
        [UIView beginAnimations:@"Dragging A DraggableView" context:nil];
        self.playerView.center = location;
        [UIView commitAnimations];
    }

}

这应该会给你一个流畅的动画。

答案 2 :(得分:0)

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

    UITouch* aTouch = [touches anyObject];
    UIView* aView = [aTouch view];
    if (aView != self.view) {
        [self.view bringSubviewToFront:aView];
    }
}

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

    UITouch* aTouch = [touches anyObject];
    UIView* aView = [aTouch view];
    if (aView != self.view) {
        aView.center = [aTouch locationInView:self.view];

    }
}