2012-12-19 40 views
0

我認爲我目前隱藏在屏幕的底部。現在我希望能夠通過垂直滾動垂直移動視圖,通過Y軸。但我不希望它比視圖的整個高度更上一層樓(即:我不想在底部看到空白區域)。我已經寫了這段代碼:限制UIPanGestureRecognizer的平移範圍

- (IBAction)panHighlightReadingVC:(UIPanGestureRecognizer *)recognizer 
{ 
    CGPoint translation = [recognizer translationInView:self.view]; 

    CGPoint newCenter = CGPointMake(self.view.bounds.size.width/2, 
            roundf(recognizer.view.center.y + translation.y)); 

    CGFloat velocityY = [recognizer velocityInView:self.view].y; 
    if ((recognizer.view.frameY > self.view.frameHeight - recognizer.view.frameHeight || velocityY > 0)) { 
     recognizer.view.center = newCenter; 
     [recognizer setTranslation:CGPointZero inView:self.view]; 
    } 
} 

這類工作,如果我慢慢滾動。如果我以非常快的速度滾動它,那麼視圖的frameY有可能比`superView.frameHeight - recognitionizer.view.frameHeight小。我該如何解決?

回答

1

當您計算newCenter時,將其限制在您實際需要的範圍內。如果您將newCenter限制在極限範圍內,則可能不需要最後一條if語句。

另外,當你真的讓事情變得簡單的時候,你自己幫忙,只使用中心。在你的情況下,我認爲你應該使用框架。然後,你不必擔心由2

試試將是這樣的:

- (IBAction)panHighlightReadingVC:(UIPanGestureRecognizer *)recognizer 
{ 
    CGPoint translation = [recognizer translationInView:self.view]; 

    CGFloat newY = MAX(recognizer.view.frame.origin.y + translation.y, self.view.frameHeight - recognizer.view.frameHeight); 

    CGRect newFrame = CGRectMake(recognizer.view.frame.origin.x, newY, recognizer.view.frame.size.width, recognizer.view.frame.size.height); 

    recognizer.view.frame = newFrame; 
    [recognizer setTranslation:CGPointZero inView:self.view]; 
} 

而且,速度似乎並沒有在您的情況適用,它只會使事情變得複雜。

+0

這不是我想要的。我需要限制的界限,就好像recognitionizer.view.frameY == self.view.frameHeight - recognizer.view.frameHeight然後我不想再次向上滾動 – adit