1

現在、panGestureRecognizer と次のメソッドを使用して画面上でドラッグできる imageView があります。

- (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];
}

現在、画像を画面の外にドラッグして、部分的にしか表示できないようにすることができます。画面の端で画像を停止する方法があるかどうかを知りたいですか? 私はそれが可能であることを知っています、私はただ論理に苦労しています.

4

2 に答える 2

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];
    }
}
于 2012-07-24T15:00:20.813 に答える
1

imageviewのフレームが現在のビューのフレーム(または画面の境界)に残っているかどうかを確認する必要があります。

   if ( CGRectContains(self.view.frame, self.imageView.frame) ) 
    // is inside
    else 
    //is outside or intersecting 
于 2012-07-24T14:45:27.747 に答える