- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试将平移手势识别器添加到包含 ScrollView 的 View 中,但我想我在优先级方面遇到了问题。
我的全局 UIView 有一个 UIPanGestureRecognizer 设置如下:
_bottomPanGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(bottomPanGestureDetected:)];
_bottomPanGestureRecognizer.minimumNumberOfTouches = 2;
_bottomPanGestureRecognizer.maximumNumberOfTouches = 2;
_bottomPanGestureRecognizer.delaysTouchesBegan = NO;
_bottomPanGestureRecognizer.delaysTouchesEnded = NO;
我想识别这个手势,以从底部向上显示另一个 View 。
问题是 scrollview 在我之前识别了自己的平移手势。
所以我试图推迟它感谢:
[_scrollView.panGestureRecognizer requireGestureRecognizerToFail:_bottomPanGestureRecognizer];
它正在工作,在我的两根手指向下移动到向上识别器后触发 ScrollView 事件,但现在的问题是当我只用一根手指在 ScrollView 中滚动时,滚动会在一小段延迟后起作用。
我想不耽误这次事件,这可能吗?欢迎任何想法!
干杯。
西里尔
最佳答案
如果还没有解决,我帮我解决了。
我将 UIPanGestureRecognizer 添加到 UIScrollView 以检测两个手指平移手势,默认的 UIScrollView 行为(滚动到某处)仍然有效。
所以我所做的是将 UIPanGestureReconizer 添加到 UIScrollView:
UIPanGestureRecognizer *pangestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(displayReloadIndicator:)];
pangestureRecognizer.minimumNumberOfTouches = 2;
pangestureRecognizer.delegate = self;
[self.scrollView addGestureRecognizer:pangestureRecognizer];
[pangestureRecognizer release];
在此之后我添加了代码:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
在此之后,我实现了平移手势识别器操作方法。
- (void) displayReloadIndicator:(UIPanGestureRecognizer*) panGestureRecognizer {
UIGestureRecognizerState gestureRecognizerState = gestureRecognizer.state;
CGPoint translation = [gestureRecognizer translationInView:self.scv_bibgesamt];
if (gestureRecognizerState == UIGestureRecognizerStateBegan) {
// create a UIView with all the Pull Refresh Headers and add to UIScrollView
// This is really much lines of code, but its simply creating a UIView (later you'll find a myRefreshHeaderView, which is my base view) and add UIElements e.g. UIActivityIndicatorView, a UILabel and a UIImageView on it
// In iOS 6 you will also have the possibility to add a UIRefreshControl to your UIScrollView
}
else if (gestureRecognizerState == UIGestureRecognizerStateEnded
|| gestureRecognizerState == UIGestureRecognizerStateCancelled) {
if (translation.y >= _myRefreshHeaderView.frame.size.height + 12) { // _myRefreshHeaderView is my baseview
//so the UIScrollView has been dragged down with two fingers over a specific point and have been release now, so we can refresh the content on the UIScrollView
[self refreshContent];
//animatly display the refresh view as the top content of the UIScrollView
[self.scrollView setContentOffset:CGPointMake(0, myRefreshHeaderView.frame.size.height) animated:YES];
}
else {
//the UIScrollView has not been dragged over a specific point so don't do anything (just scroll back to origin)
[self.scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
//remove the view (because it's no longer needed)
[_myRefreshHeaderView removeFromSuperview];
}
}
更新:
如果您可能希望从您的导航 Controller 集成向后滑动功能,您应该集成以下代码:
- (void) viewDidLoad {
[super viewDidLoad];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
//setup view controller
}
和
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if (gestureRecognizer == _panGestureRecognizer
&& [self.navigationController.viewControllers count] > 1) {
CGPoint point = [touch locationInView:self.view.window];
if (point.x < 20
|| point.x > self.view.window.frame.size.width - 20) {
return NO;
}
}
return YES;
}
关于ios - UIPanGestureRecognizer 与 ScrollView 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14650991/
UIGestureRecognizer 的文档引用重置函数。 但是,在 UIPanGestureRecognizer(UIGestureRecognizer 的子级)上调用 reset() 会生成此错
我有一个 UIPanGestureRecognizer,它根据我的喜好检测了太多次。我需要一个计数器并计算 3 个已完成的手势。每次我用手指平移识别器位置时,它都会触发 3 到 4 次。甚至触发了5个
我正在使用 UIPanGestureRecogniser实现拖放。当拖动开始时,我需要识别被拖动的对象。但是对象相对较小。如果用户没有在对象的中心点击对象,它就不会被拖动。 问题是当手势处理程序第一次
我正在尝试使用UIPanGestureRecognizer实现页面翻转动画。这是代码: - (void)handlePan:(UIPanGestureRecognizer *)recognizer {
我有一个 UIView 子类,我在其中添加了一个 UIPanGestureRocognizer: _panGestureRecognizer = [[UIPanGestureRecognizer al
我试图使用 UIPanGestureRecognizer 来移动我的对象,但我似乎无法让它顺利移动。当我朝一个特定的方向移动并转向相反的方向时,它不会立即使用react。我认为该值可能有问题,因为它在
我正在尝试实现 View 的拖动,当拖动停止时, View 滑到顶部并消失。我可以使用 UIPanGestureRecognizer 很好地拖动 View 。但在那之后,我用动画让它滑出。问题是在拖动
我在touchesEnded方法中调用了一个名为addProjectile的方法。 addProjectile接收touchesEnded方法接收的触摸的NSSet。为简单起见,我仅将相关代码发布到我
我遇到了 UIPanGestureRecognizer 的问题。假设我使用不同的标签动态添加 10 个按钮,当我添加第一个按钮时,尝试将其拖动到其他位置,然后它就可以正常工作。然后,如果我添加其他按钮
我有一个基类,它处理单元格的一些基本动画。在我的子类中,我已经覆盖了识别器目标并想做一些其他事情,但翻译始终是 0 因为我在基类中调用翻译被重置为 .zero . 有没有办法让我的基类执行基本动画并使
我正在使用 UIPanGestureRecognizer 将图像拖出 UICollectionViewCell,然后查看它是否与屏幕上其他位置的另一个图像发生碰撞。为此,我需要能够匹配他们的翻译坐标。
我创建了一个UIPanGestureRecognizer,但问题是当我将 View 向右滑动时, View 会向左移动。 当我向左滑动 View 时,它会向右滑动。为什么? let panGestur
我正在开发一个类似于 Tinder 中的卡片 View 。当卡片X原点大于我声明的值时,它会移出屏幕。否则,它会再次粘在中心。我正在 UIPanGestureRecognizer 函数中执行所有这些操
我有一个 UIPanGestureRecognizer 附加到父 View ,带有各种 CCSprite 我想在平移时在父 View 中移动。使用 [gesture locationOfTouch:i
使用 UIPanGestureRecognizer 我们正在移动 UICollectionView 中的单元格 当我们开始拖动时 UIGestureRecognizerStateBegan 被调用。但
我有 6 个 UIImageView,每个都连接到 UIPanGestureRecognizer,它们都连接到相同的方法。方法是: - (IBAction)handlePan:(UIPanGestur
我是 swift 和 xcode 的新手。使用 xcode 10 并尝试制作一个类似应用程序的嗡嗡声,我需要在 View 中移动多个图像。我发现了很多关于 UIPanGestureRecognizer
我有一个侧面板,其中有一个 UIImageView,我在其中附加了一个 UIPanGestureRecognizer,以便您可以推/拉侧边栏。效果很好。 问题是我有一些按钮有时会出现在侧边栏下方。如果
本质上,我想做的是移动 View 以跟随用户的平移。只要使用相同的平移对象,这种方法就可以正常工作。当用户释放并启动另一个平移时,问题就出现了。 根据文档,translationInView 中的值是
我正在将 UIPanGestureRecognizer 添加到我的 View Controller 中的一个自定义 View 。 我还使用 MFSideMenu 作为滑动菜单,在其框架中将 UIPan
我是一名优秀的程序员,十分优秀!