如何防止用户从屏幕上平移我的视图?

时间:2011-09-09 06:56:57

标签: iphone cocoa-touch ipad uigesturerecognizer

我有一个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 个答案:

答案 0 :(得分:1)

您可以在代码中添加以下条件。

if([gestureRecognizer state] == 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类层是在屏幕内部。当它在屏幕内,然后我推回到最左边的角落。

在其他情况下,它会检查屏幕右侧是否有天气。当条件满足时,它将把它推到右边界。

同样,你必须实现顶部和底部。

如果您发现代码混乱,请在此处发布。我会相应修改它。