Skip to content

Commit 4a53ae4

Browse files
adds UITapGestureRecognizer and implements UIGestureRecognizerDelegate to disable gesture recognizers on the fly based on master view state
1 parent 0d2c29b commit 4a53ae4

2 files changed

Lines changed: 35 additions & 11 deletions

File tree

CTSplitViewController/CTSplitViewController.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ typedef NSInteger CTSplitViewControllerVisibleMasterViewOrientations;
4545
@class CTSplitViewController
4646
@abstract parent view controller that mimics the behaviour of a UISplitViewController but with additional features.
4747
*/
48-
@interface CTSplitViewController : UIViewController {
48+
@interface CTSplitViewController : UIViewController <UIGestureRecognizerDelegate> {
4949
@private
5050
id<CTSplitViewControllerDelegate> __unsafe_unretained _delegate;
5151

@@ -55,6 +55,7 @@ typedef NSInteger CTSplitViewControllerVisibleMasterViewOrientations;
5555

5656
UISwipeGestureRecognizer *_leftSwipeGestureRecognizer;
5757
UISwipeGestureRecognizer *_rightSwipeGestureRecognizer;
58+
UITapGestureRecognizer *_tapGestureRecognizer;
5859

5960
CTSplitViewControllerVisibleMasterViewOrientations _supportedMasterViewOrientations;
6061
}
@@ -73,6 +74,7 @@ typedef NSInteger CTSplitViewControllerVisibleMasterViewOrientations;
7374

7475
@property (nonatomic, readonly) UISwipeGestureRecognizer *leftSwipeGestureRecognizer;
7576
@property (nonatomic, readonly) UISwipeGestureRecognizer *rightSwipeGestureRecognizer;
77+
@property (nonatomic, readonly) UITapGestureRecognizer *tapGestureRecognizer;
7678

7779
@property (nonatomic, assign) CTSplitViewControllerVisibleMasterViewOrientations supportedMasterViewOrientations;
7880

CTSplitViewController/CTSplitViewController.m

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ - (void)_showMasterViewControllerAnimated:(BOOL)animated;
6767

6868
- (void)_rightSwipeGestureRecognized:(UISwipeGestureRecognizer *)recognizer;
6969
- (void)_leftSwipeGestureRecognized:(UISwipeGestureRecognizer *)recognizer;
70+
- (void)_tapGestureRecognized:(UITapGestureRecognizer *)recognizer;
7071

7172
- (void)_morphMasterViewInAnimated:(BOOL)animated;
7273
- (void)_morphMasterViewOutAnimated:(BOOL)animated;
@@ -84,7 +85,7 @@ - (void)_masterViewWillAppearAndInvalidateBarButtonItem;
8485

8586

8687
@implementation CTSplitViewController
87-
@synthesize delegate=_delegate, viewControllers=_viewControllers, leftSwipeGestureRecognizer=_leftSwipeGestureRecognizer, rightSwipeGestureRecognizer=_rightSwipeGestureRecognizer, supportedMasterViewOrientations=_supportedMasterViewOrientations;
88+
@synthesize delegate=_delegate, viewControllers=_viewControllers, leftSwipeGestureRecognizer=_leftSwipeGestureRecognizer, rightSwipeGestureRecognizer=_rightSwipeGestureRecognizer, tapGestureRecognizer=_tapGestureRecognizer, supportedMasterViewOrientations=_supportedMasterViewOrientations;
8889

8990
#pragma mark - setters and getters
9091

@@ -240,11 +241,19 @@ - (void)loadView {
240241

241242
_rightSwipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(_rightSwipeGestureRecognized:)];
242243
_rightSwipeGestureRecognizer.direction = UISwipeGestureRecognizerDirectionRight;
244+
_rightSwipeGestureRecognizer.delegate = self;
243245
[self.view addGestureRecognizer:_rightSwipeGestureRecognizer];
244246

245247
_leftSwipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(_leftSwipeGestureRecognized:)];
246248
_leftSwipeGestureRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
249+
_leftSwipeGestureRecognizer.delegate = self;
247250
[self.view addGestureRecognizer:_leftSwipeGestureRecognizer];
251+
252+
_tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_tapGestureRecognized:)];
253+
_tapGestureRecognizer.numberOfTapsRequired = 1;
254+
_tapGestureRecognizer.numberOfTouchesRequired = 1;
255+
_tapGestureRecognizer.delegate = self;
256+
[self.view addGestureRecognizer:_tapGestureRecognizer];
248257
}
249258

250259
- (void)viewDidLoad
@@ -263,6 +272,7 @@ - (void)viewDidUnload
263272
_detailsView = nil;
264273
_rightSwipeGestureRecognizer = nil;
265274
_leftSwipeGestureRecognizer = nil;
275+
_tapGestureRecognizer = nil;
266276
}
267277

268278
#pragma mark - rotation support
@@ -291,15 +301,9 @@ - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceO
291301
_masterView.state = CTSplitViewControllerMasterViewStateVisible;
292302
_masterView.frame = self.visibleMasterFrame;
293303
_detailsView.frame = self.visibleMasterDetailsFrame;
294-
295-
_leftSwipeGestureRecognizer.enabled = NO;
296-
_rightSwipeGestureRecognizer.enabled = NO;
297304
} else {
298305
[self _unloadMasterView];
299306
_detailsView.frame = self.hiddenMasterDetailsFrame;
300-
301-
_leftSwipeGestureRecognizer.enabled = YES;
302-
_rightSwipeGestureRecognizer.enabled = YES;
303307
}
304308
}
305309

@@ -361,6 +365,21 @@ - (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
361365
return NO;
362366
}
363367

368+
#pragma mark - UIGestureRecognizerDelegate
369+
370+
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
371+
{
372+
if (gestureRecognizer == _tapGestureRecognizer) {
373+
return _masterView.state == CTSplitViewControllerMasterViewStateMorphedIn;
374+
} else if (gestureRecognizer == _leftSwipeGestureRecognizer) {
375+
return _masterView.state == CTSplitViewControllerMasterViewStateMorphedIn;
376+
} else if (gestureRecognizer == _rightSwipeGestureRecognizer) {
377+
return ![self _isMasterViewControllerVisibleInInterfaceOrientation:self.interfaceOrientation] && _masterView.state != CTSplitViewControllerMasterViewStateMorphedIn;
378+
}
379+
380+
return YES;
381+
}
382+
364383
#pragma mark - private implementation ()
365384

366385
- (void)_removeViewControllers
@@ -419,9 +438,6 @@ - (void)_hideMasterViewControllerAnimated:(BOOL)animated
419438
void(^completionBlock)(BOOL finished) = ^(BOOL finished) {
420439
[self.masterViewController viewDidDisappear:animated];
421440
[self _unloadMasterView];
422-
423-
_leftSwipeGestureRecognizer.enabled = YES;
424-
_rightSwipeGestureRecognizer.enabled = YES;
425441
};
426442

427443

@@ -525,6 +541,12 @@ - (void)_leftSwipeGestureRecognized:(UISwipeGestureRecognizer *)recognizer
525541
}
526542
}
527543

544+
- (void)_tapGestureRecognized:(UITapGestureRecognizer *)recognizer
545+
{
546+
NSLog(@"Wow, recognized");
547+
#warning implement
548+
}
549+
528550
- (void)_morphMasterViewInAnimated:(BOOL)animated
529551
{
530552
if (!self.isMasterViewLoaded) {

0 commit comments

Comments
 (0)