Как сделать объект перетаскиваемым?

Эй, ребята, мне было интересно, можно ли было сделать объект наподобие UIImageView перетаскиваемым. Я знаю о UITouch и касается, т.е.

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

но таким образом пользователь может заставить объект перепрыгивать через экран туда, где он или она касается экрана, но я хочу, чтобы пользователю пришлось вручную перетаскивать объект по экрану.

пожалуйста, объясните с кодом и дайте мне знать, если я должен быть более конкретным или ясным...

3 ответа

Решение

Вы можете сделать это:

- (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];
    }

}

Это должно дать вам плавную анимацию.

Если вы хотите, чтобы ваш пользователь перетаскивал, сначала вы должны проверить, находится ли касание внутри прямоугольной рамки изображения. Чтобы улучшить взаимодействие с пользователем, вы можете обнаружить смещение касания от центра просмотра изображений; хорошее место, чтобы сделать это внутри the touchesBegan:withEvent:, После этого вы должны изменить положение изображения, например:

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);
}

PS - В следующий раз попробуйте поискать похожие вопросы...

-(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];

    }
}
Другие вопросы по тегам