我想创建一个应用程序,它显示一个可拖动的窗口(购物车)。必须从屏幕底部拖动购物车,并且必须覆盖所有打开的视图。拖动必须跟着你的手指。
是否可以使用segues实现这一点?我的想法是用这样的触摸事件来执行segue:
[self performSegueWithIdentifier:@"Show Cart" sender:self];
然后,segue实施将打开购物车,将其放在屏幕外,然后将其定位以反映用户手指的移动,直到用户释放它。然后它会动画回到全屏幕。
它不是意味着这个,那我该如何实现呢?
编辑: 我明白了,我必须更加具体:)如果我理解文档很好,我有三种方式来呈现一个视图:
将它推送到navigationController:我不想要这个,因为购物车存在于我的导航链“上方”,因此将其推到那里会使用户感到困惑。
以模态方式呈现:您无法拖动视图,因为它后面的对象不会显示(它们只是黑色)。
将视图添加到其他视图中,例如我的应用程序的根navigationController:尝试了这个,但当我点击我的购物车上的某个按钮时,应用程序崩溃了。我相信,这是因为我没有很好地初始化或存储控制器。
所以,假设我可以以模态方式呈现视图。但是我怎么解决,那个呈现触摸的窗口移动也是如此?这个视图理想地放在哪里,哪个对象?
答案 0 :(得分:1)
来自apple docs:
“创建自定义细分
Interface Builder为从一个视图控制器转换到另一个视图控制器的所有标准方法提供了分段......“
所以如果你想移动一个视图(不是一个视图控制器),那么手指的移动就不适合你。
为了通过手指的移动来移动视图,这就是你应该做的事情:
在您的视图中添加一个平移手势识别器(我们称之为View):
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];
}
请注意,此代码假定View直接添加到viewControllers.view(其中self引用viewController)