2013-06-20 3 views
0

В настоящее время я перемещаю UIImageView с использованием объекта UIPanGestureRecognizer в своем приложении. В настоящее время этот UIImageView движется вверх и вниз очень хорошо на моем экране. Однако теперь я хочу ограничить границу движения UIImageView в пределах области, охватываемой моим UITableView, который находится посередине экрана. Я хочу ограничить это перемещение как верхней, так и нижней границ UITableView. Вот мой соответствующий метод, где я могу контролировать движение моего UIImageView:Необходимо ограничить перемещение UIImageView в область, охватываемую UITableView, используя UIPanGestureRecognizer в iOS

- (void)panGestureDetected:(UIPanGestureRecognizer *)recognizer { 

    _startLocation = [recognizer locationInView:_imageView]; 

    NSLog(@"The point is: %d", _startLocation); 

    CGPoint newCenter = _imageView.center; 

    newCenter.y = [recognizer locationInView:[_imageView superview]].y; 
//this is where I figure I need to include an if statement to perform a check to see if the location is within the desired region 

    _imageView.center = newCenter; 


} 

я понимаю, что мне нужно будет включать в себя «если» заявление в моем методе, чтобы проверить, если мой UIImageView находится в пределах моей желаемой области, но проблема в том, что я не уверен, как проверить это. Может ли кто-нибудь помочь мне здесь?

ответ

0

Вы должны использовать метод translationInView (documentation).

Это вернет CGPoint места, куда пользователь перемещает изображение. Сравните исходное положение изображения с переводом. Если перевод слишком велик, чтобы изображение было перемещено за пределы желаемой области, не перемещайте его.

Код должен выглядеть примерно так (я думаю, вы могли бы просто бросить это право):

CGPoint translation = [recognizer translationInView:_imageView.superview]; 
[recognizer setTranslation:CGPointMake(0, 0) inView:_imageView.superview]; 

CGPoint center = recognizer.view.center; 
center.y += translation.y; 
if (center.y < _table.frame.origin.y 
    || center.y > _table.frame.size.height) { 
      return; 
} 
recognizer.view.center = center; 

См this question для альтернативной реализации.

+0

Большое спасибо за ваше решение. У меня есть для вас следующий вопрос. Мой вид таблицы (_table) и мой UIImageView (_imageView) прикреплены к представлению parent/super. Из-за этого замените _imageView.superview на _table? – syedfa

+0

Я бы заменил _imageView.superview.frame.origin.y с _table.frame.origin.y и _imageView.frame.size.height с _table.frame.size.height. дай мне знать, если это работает – Austin