1

現在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];
}
4

2 に答える 2

1

境界を確認し、画像の新しい位置が有効かどうかを判断する必要があります。次に、それに応じて変換を適用するかどうかを指定できます。

于 2011-11-02T23:25:20.817 に答える
0

このコードは、私のプロジェクトの 1 つであるSSPhotoCropperViewControllerからのものです。ここでは、ユーザーがスクロールビュー内で画像を移動できるようにしていますが、スクロールビューの境界の外に画像を移動させたくありません。imageview の 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;
    }
}
于 2011-11-03T08:46:12.110 に答える