【发布时间】:2013-06-28 11:47:41
【问题描述】:
似乎 self.decelerating 和 self.dragging 在覆盖 layoutSubviews 调用期间不可靠。例如,它们偶尔都为真,这显然是不可能的。
有没有可靠的方法来获取 UIScrollView 是否在 layoutSubviews 中减速?
【问题讨论】:
标签: ios uiscrollview layoutsubviews
似乎 self.decelerating 和 self.dragging 在覆盖 layoutSubviews 调用期间不可靠。例如,它们偶尔都为真,这显然是不可能的。
有没有可靠的方法来获取 UIScrollView 是否在 layoutSubviews 中减速?
【问题讨论】:
标签: ios uiscrollview layoutsubviews
我从来没有遇到过 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;
}
【讨论】:
像这样固定一个实例变量:
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
_decelerating = YES;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
_decelerating = NO;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
_decelerating = NO;
}
问题是如果您在减速时开始拖动,self.decelerating 不会取消设置。以上通过考虑scrollViewWillBeginDragging 解决了这个问题。
【讨论】: