2011-09-09 65 views
0

我有一個UIView從手勢識別器接收用戶平移。我意識到有些時候用戶會「拋出」我的觀點幾乎在屏幕之外,而且看起來很糟糕。我想防止這種情況發生。我知道我應該在選擇器中進行一些檢查,但是在翻譯視圖時我不知道該怎麼做。如何防止用戶平移我的視圖關閉屏幕?

這裏是我的代碼:

- (void)panPiece:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    UIView *piece = [gestureRecognizer view]; 

    [self adjustAnchorPointForGestureRecognizer:gestureRecognizer]; 

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

     [piece setCenter:CGPointMake([piece center].x + translation.x, [piece center].y + translation.y)]; 
     [gestureRecognizer setTranslation:CGPointZero inView:[piece superview]]; 
    } 


} 

在此先感謝

問候

利奧

回答

1

你可以在你的代碼中添加以下條件。

如果([gestureRecognizer狀態] == UIGestureRecognizerStateEnd)

裏面,你可以查天氣的看法任何一個角落是外屏還是不行。如果它在外面,那麼你可以將它反彈回屏幕內。

以下是一個可能的例子。

if (zl.layer.frame.origin.x > 0) { 
    self.moveFactorX = self.moveFactorX-zl.layer.frame.origin.x; 
    [zl.layer setValue:[NSNumber numberWithFloat: moveFactorX+totalMoveX] forKeyPath: @"transform.translation.x"]; 
} 
else if(zl.layer.frame.origin.x < pageSize.width - zl.layer.frame.size.width){ 
    self.moveFactorX = self.moveFactorX-(zl.layer.frame.origin.x - pageSize.width + zl.layer.frame.size.width); 
    [zl.layer setValue:[NSNumber numberWithFloat: moveFactorX+totalMoveX] forKeyPath: @"transform.translation.x"]; 
} 

這爲我檢查天氣zl類圖層的左側是在屏幕內。當它在屏幕內時,我正在推回到最左邊的角落。

在其他方面,它會檢查從屏幕右側或右側的天氣。當條件滿足時它會將它推到右邊界。

同樣的方式,你必須實現頂部和底部也。

如果您發現代碼混淆,然後張貼在這裏。我會相應地修改它。