ScrollView中嵌套ScrollView时,滑动时,默认情况下,手指在哪个ScrollView上滑动,滑动事件就被其消费掉,滑动距离就在其上。
有时,会期望滑动内部ScrollView时,由外层的控制器来控制滑动的距离应该由哪个ScrollView来体现。看到一种实现方式,在此记录下:
总体思路是:
- 移除当前被嵌套的ScrollView自身的contentOffset的观察者
- 对被嵌套的ScrollView的contentOffset属性设置观察者,设置为当前控制器
- contentOffset发生变化时,通过监听函数获取位移,根据事件生产者ScrollView,以及预先设置的条件,移动特定ScrollView的位移。
// contentOffset属性的声明
static NSString *const kObseverKeyContentOffset = @"contentOffset";
-(void)chooseNested:(id<NestedDelegate>)delegate{
if (_currentNestedDelegate) {
// 移除上一个ScrollView的contentOffset的监听
[_currentNestedDelegate.getNestedScrollView removeObserver:self forKeyPath:kObseverKeyContentOffset];
}
// 保存当前被嵌套的scrollView对象
_currentNestedDelegate = delegate;
// 添加被嵌套的ScrollView的contentOffset属性监听
[_