Ios 仅垂直平移具有弹性效果的UIView?

Ios 仅垂直平移具有弹性效果的UIView?,ios,objective-c,uiview,uipangesturerecognizer,Ios,Objective C,Uiview,Uipangesturerecognizer,我的应用程序中有一个视图占据了屏幕的下半部分。我想允许用户向下拖动视图,这样它只占屏幕底部的1/4。然后,用户可以将其向上拖动,再次占据屏幕的1/2。因此,就像iOS7中的底部向上滑动视图(即手电筒、计算器、音量等)。我需要以完全相同的方式运行,但不要让它完全离开屏幕 所以我只需要保持平底锅垂直。我也希望它停止时,它覆盖了一半的屏幕,然后停止另一个方向时,它是屏幕的1/4。我还希望它在拖过某个点时捕捉到位,这样屏幕上只有1/2和1/4两个位置。所以我不希望用户能够在屏幕上拖动1/3 这是我到目前

我的应用程序中有一个视图占据了屏幕的下半部分。我想允许用户向下拖动视图,这样它只占屏幕底部的1/4。然后,用户可以将其向上拖动,再次占据屏幕的1/2。因此,就像iOS7中的底部向上滑动视图(即手电筒、计算器、音量等)。我需要以完全相同的方式运行,但不要让它完全离开屏幕

所以我只需要保持平底锅垂直。我也希望它停止时,它覆盖了一半的屏幕,然后停止另一个方向时,它是屏幕的1/4。我还希望它在拖过某个点时捕捉到位,这样屏幕上只有1/2和1/4两个位置。所以我不希望用户能够在屏幕上拖动1/3

这是我到目前为止所拥有的,但它允许我将视野抛过最大停车点

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

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

    CGPoint vel = [gestureRecognizer velocityInView:piece];
    if (vel.y > 0)
    {
        // user dragged towards the right
        //counter++;

        if(piece.frame.origin.y >= (self.view.frame.size.height - piece.frame.size.height) ) {
            // don't update

        } else {
            [piece setCenter:CGPointMake([piece center].x, [piece center].y + translation.y)];
        }
    } else {

        // user dragged towards the left
        //counter--;
        NSLog(@"");
        if(piece.frame.origin.y <= 205) {
            // don't update

        } else {

            [piece setCenter:CGPointMake([piece center].x, [piece center].y + translation.y)];
        }
    }

    [gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
}
}
-(iAction)装甲:(UIPangestureRecognitor*)手势识别器
{
UIView*piece=[gestureRecognizer视图];
如果([GestureRecognitzer state]==UIGestureRecognitzerStateStarted | |[GestureRecognitzer state]==UIGestureRecognitzerStateChanged){
CGPoint translation=[GestureRecognitor TranslationView:[piece superview]];
CGPoint vel=[手势识别器速度视图:片段];
如果(y级>0)
{
//用户向右拖动
//计数器++;
if(工件.框架.原点.y>=(self.view.frame.size.height-工件.框架.尺寸.高度)){
//不更新
}否则{
[piece setCenter:CGPointMake([piece center].x[piece center].y+translation.y)];
}
}否则{
//用户向左拖动
//计数器--;
NSLog(@“);

如果(piece.frame.origin.y查看此示例项目中的UIResponder文档和触摸手势:

好的,这很接近。但是如何防止抛投。我已经从水平方向阻止了它,但是当试图阻止阻力通过某个点时。我可以通过抛投来通过该停止点。你需要检测速度