UIScrollView的layoutSubviews中的self.decelerating和self.dragging

时间:2013-06-28 11:47:41

标签: ios uiscrollview layoutsubviews

在重写的layoutSubviews调用期间,self.decelerating和self.dragging似乎不可靠。例如,它们偶尔都是正确的,这显然是不可能的。

是否有可靠的方法来判断UIScrollView是否在layoutSubviews中减速?

2 个答案:

答案 0 :(得分:0)

我从来没有遇到任何UIScrollView协议方法不可靠的问题。您是否有可能在另一个委托类的layoutSubviews中管理您当前正在做的事情?像父母一样,还是什么?

然后,您可以(可能)更可靠地监听委托方法。

#pragma mark UIScrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
  if (self.scrollViewDecelerating)
  {
    // stuff...
  }
}

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
  self.scrollViewDecelerating = YES;
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
  self.scrollViewDecelerating = NO;
}

答案 1 :(得分:0)

设置实例变量就像修复它一样:

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
    _decelerating = YES;
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    _decelerating = NO;
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    _decelerating = NO;
}

问题是如果你在减速时开始拖动,则自动减速不会被取消。以上修正了考虑scrollViewWillBeginDragging的问题。