material-scrollview-delegate-multiplexer-ios
material-scrollview-delegate-multiplexer-ios copied to clipboard
MDFScrollViewDelegateMultiplexer acts as a proxy object for UIScrollViewDelegate events and forwards all received events to an ordered list of registered observers.
MDFScrollViewDelegateMultiplexer
This class acts as a proxy object for UIScrollViewDelegate events and forwards all received
events to an ordered list of registered observers.
Installation
Requirements
- Xcode 7.0 or higher.
- iOS SDK version 9.0 or higher.
Installation with CocoaPods
To add this component to your Xcode project using CocoaPods, add the following to your Podfile:
pod 'MDFScrollViewDelegateMultiplexer'
Then, run the following command:
pod install
Overview
When a UIScrollViewDelegate method invocation is received by the multiplexer, the multiplexer
forwards the invocation to each observer in order of registration.
If the scroll view method signature has a return value, after all delegate method invocations, the return value will be provided by the first observing delegate that responded. If no observers implement the method, a default return value will be used.
However, if a combiner is set and the receiving class conforms to the
MDFScrollViewDelegateCombining protocol, then the receiving class can designate which result
value to return via the use of the optional protocol methods.
Usage
#import "MDFScrollViewDelegateMultiplexer.h"
_multiplexer = [[MDFScrollViewDelegateMultiplexer alloc] init];
myScrollView.delegate = _multiplexer;
[_multiplexer addObservingDelegate:myControl];
[_multiplexer addObservingDelegate:anotherControl];
Using the MDFScrollViewDelegateCombining protocol
First conform to the MDFScrollViewDelegateCombining protocol:
@interface MyViewController () <MDFScrollViewDelegateCombining>
@end
[_multiplexer setCombiner:self];
Handle one of the UIScrollViewDelegate protocol methods that return a value:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return myZoomingView;
}
And finally return the desired observer's results from the combiner method:
- (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;
}