簡體   English   中英

使用UIPanGestureRecognizer

[英]Use of UIPanGestureRecognizer

我有一個小的UIPanGestureRecognizer使用UIPanGestureRecognizer在屏幕上移動,但是當它從UIPanGestureRecognizer視圖的邊緣出來時沒有得到更多的觸摸,因此無法再回頭。 如何防止圖像從超視圖的邊緣出來? 這是代碼:

- (void)pan:(UIPanGestureRecognizer *)gestureRecognizer
{
if (inLongPress) {
    UIView *hitView = [gestureRecognizer view];

    [self adjustAnchorPointForGestureRecognizer:gestureRecognizer];

    if (!(CGRectContainsRect(self.imageView.frame, hitView.frame))) {

        [UIView beginAnimations:@"" context:NULL];
        [hitView setCenter:CGPointMake(_prevCenter.x, _prevCenter.y)];
        [UIView commitAnimations];

     }
    _prevCenter=hitView.center;

    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer   state] == UIGestureRecognizerStateChanged) {
        CGPoint translation = [gestureRecognizer translationInView:[hitView superview]];

        [hitView setCenter:CGPointMake([hitView center].x + translation.x, [hitView center].y + translation.y)];

        [gestureRecognizer setTranslation:CGPointZero inView:[hitView superview]];
    }

    if ([gestureRecognizer state] == UIGestureRecognizerStateEnded){
        inLongPress=NO;
        hitView.alpha=1.0;
    }
}

}

在視圖控制器的viewDidLoad方法中,只需將superview的clipsToBounds屬性設置為YES即可

[superview setClipsToBounds:YES];

if將CGPoint限制在允許的范圍內,只需使用幾個。

這樣的東西確保你不能將對象移動到視圖之外:

CGFloat proposedX = location.x;
CGFloat proposedY = location.y;

CGRect objectFrame = hitView.frame;
CGFloat allowedXMin = 0 + objectFrame.size.width / 2.0f;
CGFloat allowedXMax = self.view.bounds.size.width - objectFrame.size.width / 2.0f;
CGFloat allowedYMin = 0 + objectFrame.size.height / 2.0f;
CGFloat allowedYMax = self.view.bounds.size.height - objectFrame.size.height / 2.0f;

if (proposedX < allowedXMin) {
    proposedX = allowedXMin;
}
else if (proposedX > allowedXMax) {
    proposedX = allowedXMax;
}

if (proposedY < allowedYMin) {
    proposedY = allowedYMin;
}
else if (proposedY > allowedYMax) {
    proposedY = allowedYMax;
}
location = CGPointMake(proposedX, proposedY);

hitView.center = location;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM