Допустим, вы находитесь в середине операции перетаскивания. Вы перемещаете экземпляр кнопки, устанавливая ее центр в центр любого жеста, вызывающего движение.
Вы можете наложить ограничения, протестировав центр жеста и сбросив значения центра, если они вам не нравятся. Ниже предполагается, что кнопка подключена к действию для всех событий Touch Drag, но этот принцип по-прежнему применяется, если вы используете распознаватели жестов или touchesBegan: и друзей.
- (IBAction)handleDrag:(UIButton *)sender forEvent:(UIEvent *)event
{
CGPoint point = [[[event allTouches] anyObject] locationInView:self.view];
if (point.y > 200)
{
point.y = 200; //No dragging this button lower than 200px from the origin!
}
sender.center = point;
}
Если вам нужна кнопка, которая скользит только по одной оси, это достаточно просто:
- (IBAction)handleDrag:(UIButton *)sender forEvent:(UIEvent *)event
{
CGPoint point = [[[event allTouches] anyObject] locationInView:self.view];
point.y = sender.center.y; //Always stick to the same y value
sender.center = point;
}
Или, возможно, вы хотите, чтобы кнопка перетаскивалась только внутри области определенного вида. Это может быть легче определить, если ваши границы сложны.
- (IBAction)handleDrag:(UIButton *)sender forEvent:(UIEvent *)event
{
CGPoint point = [[[event allTouches] anyObject] locationInView:self.someView];
if ([self.someView pointInside:point withEvent:nil])
{
sender.center = point;
//Only if the gesture center is inside the specified view will the button be moved
}
}