Этот код взят из одного из моих проектов - SSPhotoCropperViewController . Здесь я разрешаю пользователю перемещать изображение в просмотре прокрутки, но я не хочу, чтобы он перемещал изображение за пределы просмотра прокрутки. Я обрабатываю событие UIControlEventTouchDragInside просмотра изображения, определяю новую позицию и проверяю, является ли новая позиция действительной, затем решаю переместить изображение или нет. Вот фрагмент кода для этого. Трудно сказать больше, не видя весь код. Вы можете использовать эту идею здесь и применить ее к вашему делу, это не должно быть слишком сложно. Надеюсь, это поможет.
- (BOOL) isRectanglePositionValid:(CGPoint)pos
{
CGRect innerRect = CGRectMake((pos.x + 15), (pos.y + 15), 150, 150);
return CGRectContainsRect(self.scrollView.frame, innerRect);
}
- (IBAction) imageMoved:(id)sender withEvent:(UIEvent *)event
{
CGPoint point = [[[event allTouches] anyObject] locationInView:self.view];
CGPoint prev = _lastTouchDownPoint;
_lastTouchDownPoint = point;
CGFloat diffX = point.x - prev.x;
CGFloat diffY = point.y - prev.y;
UIControl *button = sender;
CGRect newFrame = button.frame;
newFrame.origin.x += diffX;
newFrame.origin.y += diffY;
if ([self isRectanglePositionValid:newFrame.origin]) {
button.frame = newFrame;
}
}