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

标签 ios objective-c uiview uipangesturerecognizer

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

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

这是我目前所拥有的,但它允许我将 View 抛出或抛出超过最大停止点。

- (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]];
}
}

最佳答案

关于ios - 仅垂直平移具有弹性效果的 UIView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22212847/

相关文章:

objective-c - NSTextField doubleValue 本地化混淆

objective-c - 如何为 QuickLook 插件开发/创建 GUI?

iphone - 如何识别设备(唯一标识符、CFUUIDRef、设备 token ?)

ios - 无法在@interface 或@protocol : How to deal with 内声明变量

iphone - Zxing 与 Xcode 4

ios - 当子类 UIView,Objective C 时,在重绘方法中得到奇怪的结果

ios - 如何在整个屏幕上创建透明覆盖,包括事件键盘

ios - 如何在 iOS 中制作带有底部箭头的提示气球?

ios - fatal error : malformed or corrupted AST file - Xcode

c# - 当我从 UITableViewSource 单击 RowSelected 时如何打开 UIViewController