Как ограничить перевод изображения вне экрана ipad - PullRequest
1 голос
/ 02 ноября 2011

В настоящее время я использую UIPanGestureRecognizer для перевода изображения на экране ipad, но проблема в том, что изображение выходит за пределы экрана. Так как же я могу ограничить движение изображения за пределами экрана Ipad.

- (void)translate:(UIPanGestureRecognizer *)gesture {
    CGPoint myTranslation = [gesture translationInView:self];
    self.transform = CGAffineTransformTranslate(self.transform, myTranslation.x, myTranslation.y);
    [gesture setTranslation:CGPointZero inView:self];
}

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Вы должны проверить границы и определить, является ли новая позиция изображения действительной или нет.Тогда вы можете применить преобразование или нет в соответствии с этим.

0 голосов
/ 03 ноября 2011

Этот код взят из одного из моих проектов - 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...