Skip to content

Commit 1af5db2

Browse files
author
Gustavo
committed
Adding a delegate to REMenu for handling before and after an open or close event.
1 parent 3d80ae2 commit 1af5db2

3 files changed

Lines changed: 54 additions & 1 deletion

File tree

REMenu/REMenu.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#import "REMenuItem.h"
3030
#import "REMenuContainerView.h"
3131

32+
@class REMenu;
3233
@class REMenuItem;
3334

3435
typedef NS_ENUM(NSInteger, REMenuImageAlignment) {
@@ -41,6 +42,15 @@ typedef NS_ENUM(NSInteger, REMenuLiveBackgroundStyle) {
4142
REMenuLiveBackgroundStyleDark
4243
};
4344

45+
@protocol REMenuDelegate <NSObject>
46+
@optional
47+
-(void)willOpenMenu:(REMenu *)menu;
48+
-(void)didOpenMenu:(REMenu *)menu;
49+
-(void)willCloseMenu:(REMenu *)menu;
50+
-(void)didCloseMenu:(REMenu *)menu;
51+
52+
@end
53+
4454
@interface REMenu : NSObject
4555

4656
// Data
@@ -53,6 +63,7 @@ typedef NS_ENUM(NSInteger, REMenuLiveBackgroundStyle) {
5363
@property (copy, readwrite, nonatomic) void (^closeCompletionHandler)(void);
5464
@property (copy, readwrite, nonatomic) void (^closePreparationBlock)(void);
5565
@property (assign, readwrite, nonatomic) BOOL closeOnSelection;
66+
@property (weak, readwrite, nonatomic) id <REMenuDelegate> delegate;
5667

5768
// Style
5869
//

REMenu/REMenu.m

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,10 @@ - (void)showFromRect:(CGRect)rect inView:(UIView *)view
240240
[self.containerView addSubview:self.menuWrapperView];
241241
[view addSubview:self.containerView];
242242

243+
if ([self.delegate respondsToSelector:@selector(willOpenMenu:)]) {
244+
[self.delegate willOpenMenu:self];
245+
}
246+
243247
// Animate appearance
244248
//
245249
if (self.bounce) {
@@ -257,6 +261,9 @@ - (void)showFromRect:(CGRect)rect inView:(UIView *)view
257261
self.menuWrapperView.frame = frame;
258262
} completion:^(BOOL finished) {
259263
self.isAnimating = NO;
264+
if ([self.delegate respondsToSelector:@selector(didOpenMenu:)]) {
265+
[self.delegate didOpenMenu:self];
266+
}
260267
}];
261268
} else {
262269
[UIView animateWithDuration:self.animationDuration
@@ -269,6 +276,9 @@ - (void)showFromRect:(CGRect)rect inView:(UIView *)view
269276
self.menuWrapperView.frame = frame;
270277
} completion:^(BOOL finished) {
271278
self.isAnimating = NO;
279+
if ([self.delegate respondsToSelector:@selector(didOpenMenu:)]) {
280+
[self.delegate didOpenMenu:self];
281+
}
272282
}];
273283

274284
}
@@ -283,6 +293,9 @@ - (void)showFromRect:(CGRect)rect inView:(UIView *)view
283293
self.menuWrapperView.frame = frame;
284294
} completion:^(BOOL finished) {
285295
self.isAnimating = NO;
296+
if ([self.delegate respondsToSelector:@selector(didOpenMenu:)]) {
297+
[self.delegate didOpenMenu:self];
298+
}
286299
}];
287300
}
288301
}
@@ -341,13 +354,19 @@ - (void)closeWithCompletion:(void (^)(void))completion
341354
if (self.closeCompletionHandler) {
342355
self.closeCompletionHandler();
343356
}
357+
if ([self.delegate respondsToSelector:@selector(didCloseMenu:)]) {
358+
[self.delegate didCloseMenu:self];
359+
}
344360
}];
345361

346362
};
347363

348364
if (self.closePreparationBlock) {
349365
self.closePreparationBlock();
350366
}
367+
if ([self.delegate respondsToSelector:@selector(willCloseMenu:)]) {
368+
[self.delegate willCloseMenu:self];
369+
}
351370

352371
if (self.bounce) {
353372
[UIView animateWithDuration:self.bounceAnimationDuration animations:^{

REMenuExample/REMenuExample/Classes/Controllers/NavigationViewController.m

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#import "ActivityViewController.h"
1515
#import "ProfileViewController.h"
1616

17-
@interface NavigationViewController ()
17+
@interface NavigationViewController () <REMenuDelegate>
1818

1919
@property (strong, readwrite, nonatomic) REMenu *menu;
2020

@@ -123,6 +123,7 @@ - (void)viewDidLoad
123123
badgeLabel.backgroundColor = [UIColor colorWithRed:0 green:179/255.0 blue:134/255.0 alpha:1];
124124
badgeLabel.layer.borderColor = [UIColor colorWithRed:0.000 green:0.648 blue:0.507 alpha:1.000].CGColor;
125125
};
126+
self.menu.delegate = self;
126127

127128

128129
[self.menu setClosePreparationBlock:^{
@@ -143,4 +144,26 @@ - (void)toggleMenu
143144
[self.menu showFromNavigationController:self];
144145
}
145146

147+
#pragma mark - REMenu Delegate Methods
148+
149+
-(void)willOpenMenu:(REMenu *)menu
150+
{
151+
NSLog(@"Delegate method: %@", NSStringFromSelector(_cmd));
152+
}
153+
154+
-(void)didOpenMenu:(REMenu *)menu
155+
{
156+
NSLog(@"Delegate method: %@", NSStringFromSelector(_cmd));
157+
}
158+
159+
-(void)willCloseMenu:(REMenu *)menu
160+
{
161+
NSLog(@"Delegate method: %@", NSStringFromSelector(_cmd));
162+
}
163+
164+
-(void)didCloseMenu:(REMenu *)menu
165+
{
166+
NSLog(@"Delegate method: %@", NSStringFromSelector(_cmd));
167+
}
168+
146169
@end

0 commit comments

Comments
 (0)