Как сделать объект перетаскиваемым?
Эй, ребята, мне было интересно, можно ли было сделать объект наподобие 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];
}
}