我有一个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]];
}
}
提前致谢
此致
利奥
答案 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类层是在屏幕内部。当它在屏幕内,然后我推回到最左边的角落。
在其他情况下,它会检查屏幕右侧是否有天气。当条件满足时,它将把它推到右边界。
同样,你必须实现顶部和底部。
如果您发现代码混乱,请在此处发布。我会相应修改它。