GOSScrollViewDelegateMultiplexer 2.0.0

GOSScrollViewDelegateMultiplexer 2.0.0

测试已测试
语言语言 Obj-CObjective C
许可证 Apache 2
发布上次发布2016年7月

Chris Cox维护。



  • Chris Cox

MDFScrollViewDelegateMultiplexer

此类充当 UIScrollViewDelegate 事件的中介对象,并将所有接收的事件按注册顺序转发给注册观察者。

安装

要求

  • Xcode 7.0 或更高版本。
  • iOS SDK 版本 7.0 或更高。

概述

当多路复用器收到 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;
}