Skip to content

Instantly share code, notes, and snippets.

@wongzigii
Forked from steipete/gist:2871154
Created January 12, 2017 03:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wongzigii/fab410d202190b5ffbc6ee8b055293bb to your computer and use it in GitHub Desktop.
Save wongzigii/fab410d202190b5ffbc6ee8b055293bb to your computer and use it in GitHub Desktop.
This was nice and fast... but it takes up WAY TOO MUCH space. And it's annoying to write.
(I like the way I can just step into the function that calls the delegate for debugging)
What's a better way to not make me call respondsToSelector in the middle of my code? Some proxy?
struct {
unsigned int delegateWillDisplayDocument:1;
unsigned int delegateDidDisplayDocument:1;
unsigned int delegateDidShowPageView:1;
unsigned int delegateDidRenderPageView:1;
unsigned int delegateDidChangeViewMode:1;
unsigned int delegateDidTapOnPageView:1;
unsigned int delegateDidTapOnAnnotation:1;
unsigned int delegateShouldDisplayAnnotation:1;
unsigned int delegateViewForAnnotation:1;
unsigned int delegateAnnotationViewForAnnotation:1;
unsigned int delegateWillShowAnnotationView:1;
unsigned int delegateDidShowAnnotationView:1;
unsigned int delegateDidLoadPageView:1;
unsigned int delegateWillUnloadPageView:1;
unsigned int delegateDidEndPageScrollingAnimation:1;
unsigned int delegateDidEndZoomingAtScale:1;
unsigned int delegateWillShowControllerAnimated:1;
unsigned int delegateDidShowControllerAnimated:1;
} delegateFlags_;
- (void)setDelegate:(id<PSPDFViewControllerDelegate>)delegate {
if (delegate != delegate_) {
delegate_ = delegate;
delegateFlags_.delegateWillDisplayDocument = [delegate respondsToSelector:@selector(pdfViewController:willDisplayDocument:)];
delegateFlags_.delegateDidDisplayDocument = [delegate respondsToSelector:@selector(pdfViewController:didDisplayDocument:)];
delegateFlags_.delegateDidShowPageView = [delegate respondsToSelector:@selector(pdfViewController:didShowPageView:)];
delegateFlags_.delegateDidRenderPageView = [delegate respondsToSelector:@selector(pdfViewController:didRenderPageView:)];
delegateFlags_.delegateDidChangeViewMode = [delegate respondsToSelector:@selector(pdfViewController:didChangeViewMode:)];
delegateFlags_.delegateDidTapOnPageView = [delegate respondsToSelector:@selector(pdfViewController:didTapOnPageView:info:coordinates:)];
delegateFlags_.delegateDidTapOnAnnotation = [delegate respondsToSelector:@selector(pdfViewController:didTapOnAnnotation:page:info:coordinates:)];
delegateFlags_.delegateShouldDisplayAnnotation = [delegate respondsToSelector:@selector(pdfViewController:shouldDisplayAnnotation:onPageView:)];
delegateFlags_.delegateViewForAnnotation = [delegate respondsToSelector:@selector(pdfViewController:viewForAnnotation:onPageView:)];
delegateFlags_.delegateAnnotationViewForAnnotation = [delegate respondsToSelector:@selector(pdfViewController:annotationView:forAnnotation:onPageView:)];
delegateFlags_.delegateWillShowAnnotationView = [delegate respondsToSelector:@selector(pdfViewController:willShowAnnotationView:onPageView:)];
delegateFlags_.delegateDidShowAnnotationView = [delegate respondsToSelector:@selector(pdfViewController:didShowAnnotationView:onPageView:)];
delegateFlags_.delegateDidLoadPageView = [delegate respondsToSelector:@selector(pdfViewController:didLoadPageView:)];
delegateFlags_.delegateWillUnloadPageView = [delegate respondsToSelector:@selector(pdfViewController:willUnloadPageView:)];
delegateFlags_.delegateDidEndPageScrollingAnimation = [delegate respondsToSelector:@selector(pdfViewController:didEndPageScrollingAnimation:)];
delegateFlags_.delegateDidEndZoomingAtScale = [delegate respondsToSelector:@selector(pdfViewController:didEndPageZooming:atScale:)];
delegateFlags_.delegateWillShowControllerAnimated = [delegate respondsToSelector:@selector(pdfViewController:willShowController:embeddedInController:animated:)];
delegateFlags_.delegateDidShowControllerAnimated = [delegate respondsToSelector:@selector(pdfViewController:didShowController:embeddedInController:animated:)];
}
}
- (void)delegateWillDisplayDocument {
if (delegateFlags_.delegateWillDisplayDocument) {
[self.delegate pdfViewController:self willDisplayDocument:self.document];
}
}
- (void)delegateDidDisplayDocument {
if(delegateFlags_.delegateDidDisplayDocument) {
[self.delegate pdfViewController:self didDisplayDocument:self.document];
}
}
(etc, etc)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment