拖动图像时,不要让图像关闭屏幕

sjh*_*lor 1 iphone xcode objective-c uigesturerecognizer ios

我目前有一个imageView,我可以使用panGestureRecognizer和以下方法在屏幕上拖动:

- (void)panDetected:(UIPanGestureRecognizer *)panRecognizer {
  CGPoint translation = [panRecognizer translationInView:self.view];
  CGPoint imageViewPosition = self.imageView.center;
  imageViewPosition.x += translation.x;
  imageViewPosition.y += translation.y;

  self.imageView.center = imageViewPosition;
  [panRecognizer setTranslation:CGPointZero inView:self.view];
}
Run Code Online (Sandbox Code Playgroud)

目前可以将图像拖离屏幕,使其仅部分可见,我想知道是否有办法在屏幕边缘停止图像?我知道它应该是可能的,我只是在挣扎于逻辑.

Ped*_*ori 5

你试过用过CGRectContainsRect吗?

您可以将此作为内部检查panDetected:,只有在返回时才允许翻译YES.

- (void)panDetected:(UIPanGestureRecognizer *)panRecognizer {
    CGPoint translation = [panRecognizer translationInView:self.view];
    CGPoint imageViewPosition = self.imageView.center;
    imageViewPosition.x += translation.x;
    imageViewPosition.y += translation.y;

    CGFloat checkOriginX = self.imageView.frame.origin.x + translation.x; // imageView's origin's x position after translation, if translation is applied
    CGFloat checkOriginY = self.imageView.frame.origin.y + translation.y; // imageView's origin's y position after translation, if translation is applied

    CGRect rectToCheckBounds = CGRectMake(checkOriginX, checkOriginY, self.imageView.frame.size.width, self.imageView.frame.size.height); // frame of imageView if translation is applied

    if (CGRectContainsRect(self.view.frame, rectToCheckBounds)){
        self.imageView.center = imageViewPosition;
        [panRecognizer setTranslation:CGPointZero inView:self.view];
    }
}
Run Code Online (Sandbox Code Playgroud)