示例:
你有一个带有scrollEnabled = NO的UIScrollView。 用户平移一定距离后,您希望 ScrollView 开始滚动。
当手指在屏幕上向下移动并且我禁用滚动时, ScrollView 将处于死状态,直到手指抬起为止。在平移中间启用滚动不会导致其启动。
我怀疑这是因为 UIScrollView 如果在其内部 TouchBegan:withEvent: (或其私有(private)平移手势识别器)期间滚动Enabled=NO,将决定忽略触摸序列。
如何欺骗它在触摸序列中间开始本地滚动(具有弹跳效果)?
原因:对于需要此机制的简单的基于 UIKit 的游戏。
最佳答案
好吧,这仍然需要一些调整来处理第一次滚动停止后再次滚动,但我认为您想要实现的关键是实现 UIScrollViewDelegate
方法scrollViewDidScroll:
。从这里,您可以保存 ScrollView 的起始内容偏移量,并将 ScrollView 的当前偏移量与添加到 ScrollView 平移手势识别器的 y 平移的起始偏移量进行比较。
下面的代码成功地不允许滚动开始,直到用户平移至少 100 点。就像我说的,这需要一些调整,但应该足以让您继续下去。
- (void)viewDidLoad
{
[super viewDidLoad];
[self setStartingOffset:CGPointMake(0.0, -1.0)];
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (self.startingOffset.y < 0.0) {
[self setStartingOffset:scrollView.contentOffset];
}else{
static CGFloat min = 100.0;
CGFloat yTranslation = fabs([scrollView.panGestureRecognizer translationInView:scrollView].y);
if (yTranslation < self.startingOffset.y + min) {
[scrollView setContentOffset:self.startingOffset];
}else{
if (self.startingOffset.y >= 0.0) {
[self setStartingOffset:CGPointMake(0.0, -1.0)];
}
}
}
}
关于ios - 如何欺骗 UIScrollView 在平移中间开始滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21497871/