测试已测试 | ✓ |
语言语言 | Obj-CObjective C |
许可证 | Apache 2 |
发布上次发布 | 2016年7月 |
由Chris Cox维护。
此类充当 UIScrollViewDelegate
事件的中介对象,并将所有接收的事件按注册顺序转发给注册观察者。
当多路复用器收到 UIScrollViewDelegate
方法调用时,多路复用器按注册顺序将调用转发到每个观察者。
如果滚动视图方法签名有返回值,则在所有代理方法调用之后,将由第一个响应的观察者提供返回值。如果没有观察者实现该方法,将使用默认返回值。
然而,如果设置了组合器并且接收类符合 MDFScrollViewDelegateCombining
协议,那么接收类可以通过使用可选协议方法指定要返回哪个结果值。
#import "MDFScrollViewDelegateMultiplexer.h"
_multiplexer = [[MDFScrollViewDelegateMultiplexer alloc] init];
myScrollView.delegate = _multiplexer;
[_multiplexer addObservingDelegate:myControl];
[_multiplexer addObservingDelegate:anotherControl];
MDFScrollViewDelegateCombining
协议首先遵守 MDFScrollViewDelegateCombining
协议
@interface MyViewController () <MDFScrollViewDelegateCombining>
@end
[_multiplexer setCombiner:self];
处理返回值之一的 UIScrollViewDelegate
协议方法
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return myZoomingView;
}
最后,从组合器方法返回所需的观察者的结果
- (UIView *)scrollViewDelegateMultiplexer:(MDFScrollViewDelegateMultiplexer *)multiplexer
viewForZoomingWithResults:(NSPointerArray *)results
fromRespondingObservers:(NSArray *)respondingObservers {
// Lets return the results from the observer which is equal to self.
if (respondingObservers[0] == self) {
return [results pointerAtIndex:0];
}
return nil;
}