2012-06-15 3 views
0

Я пытаюсь создать перетаскиваемый образ, но я пытаюсь ограничить его перетаскивание на небольшой квадрат, а не на весь экран. Может ли кто-нибудь сказать мне, где я ошибаюсь? Я разместил код, который у меня до сих пор ниже:Граница для перетаскиваемого изображения ios

-(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; 
     }  
    } 
} 
+0

Так что происходит, когда ты перетаскивание? – graver

+0

Я могу просто перетащить его по всему экрану, а не в пределах, которые я указал. Затем перетаскиваемое изображение может исчезнуть с экрана/под панелью навигации/панелью вкладок. Как я могу ограничить его небольшим квадратом? – mhorgan

ответ

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;  
    } 
} 
+0

Спасибо, это мне очень помогло. – mhorgan

+0

отличный ответ. Работа как шарм :) – suji

1

Я недавно реализовал функцию перетаскивания изображения. Я использую PAN Gesture для перемещения изображения, которое приводит к двум CGFloats «endPointX и endPointY». В приведенном ниже коде между комментариями «Stay on Screen Check» и «End Stay on Screen check», я проверяю, находятся ли они на экране. Если нет, я настраиваю их, чтобы изображение не двигалось с экрана.

Я надеюсь, что это поможет. Если вы хотите переместить изображение в пределах небольшой части общего экрана, я добавлю изображение в подзаголовок держателя, а затем вместо него посмотрю вид держателя .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]; 
+0

Спасибо за ответ, но я не уверен, как это сделать с помощью распознавателя жестов PAN. – mhorgan

Смежные вопросы