Skip to content

Commit ee85142

Browse files
committed
Added configuration support for disabling panning over control classes.
1 parent 000a7d6 commit ee85142

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

ViewDeck/IIViewDeckController.h

+6
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ extern IIViewDeckOffsetOrientation IIViewDeckOffsetOrientationFromIIViewDeckSide
147147
int _disabledUserInteractions;
148148
CALayer* _shadowLayer;
149149
BOOL _needsAddPannersIfAllPannersAreInactive;
150+
NSMutableSet* _disabledPanClasses;
150151
}
151152

152153
typedef void (^IIViewDeckControllerBlock) (IIViewDeckController *controller, BOOL success);
@@ -302,6 +303,11 @@ typedef void (^IIViewDeckControllerBounceBlock) (IIViewDeckController *controlle
302303

303304
- (IIViewDeckSide)sideForController:(UIViewController*)controller;
304305

306+
- (void)disablePanOverViewsOfClass:(Class)viewClass;
307+
- (void)enablePanOverViewsOfClass:(Class)viewClass;
308+
- (BOOL)canPanOverViewsOfClass:(Class)viewClass;
309+
- (NSArray*)viewClassesWithDisabledPan;
310+
305311
@end
306312

307313

ViewDeck/IIViewDeckController.m

+30-4
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,10 @@ - (void)commonInitWithCenterViewController:(UIViewController *)centerController
312312
_openSlideAnimationDuration = 0.3;
313313
_closeSlideAnimationDuration = 0.3;
314314
_offsetOrientation = IIViewDeckHorizontalOrientation;
315-
315+
316+
_disabledPanClasses = [NSMutableSet setWithObject:[UISlider class]];
317+
II_RETAIN(_disabledPanClasses);
318+
316319
_delegate = nil;
317320
_delegateMode = IIViewDeckDelegateOnly;
318321

@@ -1800,6 +1803,25 @@ - (void)rightViewPushViewControllerOverCenterController:(UIViewController*)contr
18001803
}];
18011804
}
18021805

1806+
#pragma mark - disable pan over certain controllers
1807+
1808+
- (void)disablePanOverViewsOfClass:(Class)viewClass {
1809+
return [_disabledPanClasses addObject:viewClass];
1810+
}
1811+
1812+
- (void)enablePanOverViewsOfClass:(Class)viewClass {
1813+
return [_disabledPanClasses removeObject:viewClass];
1814+
}
1815+
1816+
- (BOOL)canPanOverViewsOfClass:(Class)viewClass {
1817+
return [_disabledPanClasses containsObject:viewClass];
1818+
}
1819+
1820+
- (NSArray*)viewClassesWithDisabledPan {
1821+
return [_disabledPanClasses allObjects];
1822+
}
1823+
1824+
18031825
#pragma mark - Top Side
18041826

18051827
- (BOOL)toggleTopView {
@@ -2353,14 +2375,18 @@ - (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)panner {
23532375
}
23542376

23552377
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
2378+
// allow the panningGestureDelegate to act first
23562379
if (self.panningGestureDelegate && [self.panningGestureDelegate respondsToSelector:@selector(gestureRecognizer:shouldReceiveTouch:)]) {
23572380
BOOL result = [self.panningGestureDelegate gestureRecognizer:gestureRecognizer
23582381
shouldReceiveTouch:touch];
23592382
if (!result) return result;
23602383
}
2361-
2362-
if ([[touch view] isKindOfClass:[UISlider class]])
2363-
return NO;
2384+
2385+
// check the disabled pan classes
2386+
for (Class viewClass in _disabledPanClasses) {
2387+
if ([[touch view] isKindOfClass:viewClass])
2388+
return NO;
2389+
}
23642390

23652391
_panOrigin = self.slidingControllerView.frame.origin;
23662392
return YES;

0 commit comments

Comments
 (0)