1

我想创建一个应用程序,它显示一个可拖动的窗口(购物车)。购物车必须从屏幕底部拖动​​,并且必须覆盖所有打开的视图。拖动必须跟随您的手指。

是否可以使用 segues 来实现这一点?我的想法是用这样的触摸事件执行segue:

[self performSegueWithIdentifier:@"Show Cart" sender:self];

然后,segue 实现将打开购物车,将其放在屏幕外,然后定位它以反映用户手指的移动,直到用户释放它。然后它将动画返回或全屏。

它不是为此而设计的,那么我该如何实现呢?

编辑:我明白了,我必须更具体:) 如果我很好地理解了文档,我可以通过三种方式呈现一个视图:

  1. 把它推到一个导航控制器:我不想要这个,因为购物车存在于我的导航链“上方”,所以把它推到那里会混淆用户。

  2. 以模态方式呈现它:您不能拖动视图,因为它后面的对象没有显示(它们只是黑色)。

  3. 将视图添加到其他视图,例如我的应用程序的根导航控制器:尝试了这个,但是当我单击购物车上的某个按钮时,应用程序崩溃了。我相信,那是因为我没有很好地初始化或存储控制器。

所以,假设我可以模态地呈现视图。但是我该如何解决,呈现的触摸也会导致窗口移动?这个视图理想地放置在哪个对象上?

4

1 回答 1

1

来自苹果文档:

“创建自定义 Segue

Interface Builder 为从一个视图控制器转换到另一个视图控制器的所有标准方法提供了 segues..."

因此,如果您想通过手指移动来移动视图(不是视图控制器),则不适合您..

为了通过手指的移动来移动视图,您应该这样做:

将平移手势识别器添加到您的视图(我们将其称为 theView):

    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(viewPanned:)];
    [theView addGestureRecognizer:panGestureRecognizer];

然后实现 viewPanned: 方法

- (void)viewPanned:(UIPanGestureRecognizer *)recognizer{
    if (recognizer.state == UIGestureRecognizerStateChanged)
        theView.center = [recognizer locationInView:self.view];
 }

请注意,此代码假定 theView 直接添加到 viewControllers.view(其中 self 指的是 viewController)

于 2013-03-07T14:07:45.060 回答