2011-09-09 64 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类图层的左侧是在屏幕内。当它在屏幕内时,我正在推回到最左边的角落。

在其他方面,它会检查从屏幕右侧或右侧的天气。当条件满足时它会将它推到右边界。

同样的方式,你必须实现顶部和底部也。

如果您发现代码混淆,然后张贴在这里。我会相应地修改它。