Skip to content

Commit

Permalink
added UIGestureRecognizer
Browse files Browse the repository at this point in the history
  • Loading branch information
Andy LaVoy committed Oct 17, 2013
1 parent e4e909d commit 7dc6af1
Show file tree
Hide file tree
Showing 10 changed files with 89 additions and 16 deletions.
2 changes: 2 additions & 0 deletions ALActionBlocks/ALActionBlockWrapper.h
Expand Up @@ -9,6 +9,8 @@
#import <Foundation/Foundation.h>
#import "ALActionBlock.h"

static NSString *const ALActionBlocksArray = @"ALActionBlocksArray";

@interface ALActionBlockWrapper : NSObject

@property (nonatomic, copy) ALActionBlock actionBlock;
Expand Down
1 change: 1 addition & 0 deletions ALActionBlocks/ALActionBlockWrapper.m
Expand Up @@ -11,6 +11,7 @@

@implementation ALActionBlockWrapper


- (void)invokeBlock:(id)sender {
if (self.actionBlock) {
self.actionBlock(sender);
Expand Down
3 changes: 2 additions & 1 deletion ALActionBlocks/ALActionBlocks.h
Expand Up @@ -7,4 +7,5 @@
//

#import "UIControl+ALActionBlocks.h"
#import "UIBarButtonItem+ALActionBlocks.h"
#import "UIBarButtonItem+ALActionBlocks.h"
#import "UIGestureRecognizer+ALActionBlocks.h"
8 changes: 4 additions & 4 deletions ALActionBlocks/UIBarButtonItem+ALActionBlocks.h
Expand Up @@ -12,10 +12,10 @@

@interface UIBarButtonItem (ALActionBlocks)

- (id)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem block:(ALActionBlock)actionBlock;
- (id)initWithImage:(UIImage *)image landscapeImagePhone:(UIImage *)landscapeImagePhone style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock;
- (id)initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock;
- (id)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock;
- (instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem block:(ALActionBlock)actionBlock;
- (instancetype)initWithImage:(UIImage *)image landscapeImagePhone:(UIImage *)landscapeImagePhone style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock;
- (instancetype)initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock;
- (instancetype)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock;

- (void)setBlock:(ALActionBlock)actionBlock;

Expand Down
17 changes: 8 additions & 9 deletions ALActionBlocks/UIBarButtonItem+ALActionBlocks.m
Expand Up @@ -10,34 +10,33 @@
#import "ALActionBlockWrapper.h"
#import <objc/runtime.h>

static NSString *const ALActionBlocksArray = @"ALActionBlocksArray";

@implementation UIBarButtonItem (ALActionBlocks)


- (id)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem block:(ALActionBlock)actionBlock {
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:systemItem target:nil action:nil];
- (instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem block:(ALActionBlock)actionBlock {
UIBarButtonItem *barButtonItem = [[[self class] alloc] initWithBarButtonSystemItem:systemItem target:nil action:nil];
[barButtonItem setBlock:actionBlock];
return barButtonItem;
}


- (id)initWithImage:(UIImage *)image landscapeImagePhone:(UIImage *)landscapeImagePhone style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock {
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithImage:image landscapeImagePhone:landscapeImagePhone style:style target:nil action:nil];
- (instancetype)initWithImage:(UIImage *)image landscapeImagePhone:(UIImage *)landscapeImagePhone style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock {
UIBarButtonItem *barButtonItem = [[[self class] alloc] initWithImage:image landscapeImagePhone:landscapeImagePhone style:style target:nil action:nil];
[barButtonItem setBlock:actionBlock];
return barButtonItem;
}


- (id)initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock {
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithImage:image style:style target:nil action:nil];
- (instancetype)initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock {
UIBarButtonItem *barButtonItem = [[[self class] alloc] initWithImage:image style:style target:nil action:nil];
[barButtonItem setBlock:actionBlock];
return barButtonItem;
}


- (id)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock {
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithTitle:title style:style target:nil action:nil];
- (instancetype)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style block:(ALActionBlock)actionBlock {
UIBarButtonItem *barButtonItem = [[[self class] alloc] initWithTitle:title style:style target:nil action:nil];
[barButtonItem setBlock:actionBlock];
return barButtonItem;
}
Expand Down
1 change: 0 additions & 1 deletion ALActionBlocks/UIControl+ALActionBlocks.m
Expand Up @@ -13,7 +13,6 @@

@implementation UIControl (ALActionBlocks)

static NSString *const ALActionBlocksArray = @"ALActionBlocksArray";

- (void)handleControlEvents:(UIControlEvents)controlEvents withBlock:(ALActionBlock)actionBlock {
NSMutableArray *actionBlocksArray = [self actionBlocksArray];
Expand Down
17 changes: 17 additions & 0 deletions ALActionBlocks/UIGestureRecognizer+ALActionBlocks.h
@@ -0,0 +1,17 @@
//
// UIGestureRecognizer+ALActionBlocks.h
// ALActionBlocks
//
// Created by Andy LaVoy on 10/17/13.
// Copyright (c) 2013 Andy LaVoy. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "ALActionBlock.h"

@interface UIGestureRecognizer (ALActionBlocks)

- (instancetype)initWithBlock:(ALActionBlock)actionBlock;
- (void)setBlock:(ALActionBlock)actionBlock;

@end
43 changes: 43 additions & 0 deletions ALActionBlocks/UIGestureRecognizer+ALActionBlocks.m
@@ -0,0 +1,43 @@
//
// UIGestureRecognizer+ALActionBlocks.m
// ALActionBlocks
//
// Created by Andy LaVoy on 10/17/13.
// Copyright (c) 2013 Andy LaVoy. All rights reserved.
//

#import "UIGestureRecognizer+ALActionBlocks.h"
#import "ALActionBlockWrapper.h"
#import <objc/runtime.h>

@implementation UIGestureRecognizer (ALActionBlocks)


- (instancetype)initWithBlock:(ALActionBlock)actionBlock {
UIGestureRecognizer *gestureRecognizer = [[[self class] alloc] init];
[gestureRecognizer setBlock:actionBlock];
return gestureRecognizer;
}


- (void)setBlock:(ALActionBlock)actionBlock {
NSMutableArray *actionBlocksArray = [self actionBlocksArray];

ALActionBlockWrapper *blockActionWrapper = [[ALActionBlockWrapper alloc] init];
blockActionWrapper.actionBlock = actionBlock;
[actionBlocksArray addObject:blockActionWrapper];

[self addTarget:blockActionWrapper action:@selector(invokeBlock:)];
}


- (NSMutableArray *)actionBlocksArray {
NSMutableArray *actionBlocksArray = objc_getAssociatedObject(self, &ALActionBlocksArray);
if (!actionBlocksArray) {
actionBlocksArray = [NSMutableArray array];
objc_setAssociatedObject(self, &ALActionBlocksArray, actionBlocksArray, OBJC_ASSOCIATION_RETAIN);
}
return actionBlocksArray;
}

@end
6 changes: 6 additions & 0 deletions Demo/ALActionBlocks.xcodeproj/project.pbxproj
Expand Up @@ -19,6 +19,7 @@
A1AE07D5170741AC0028A95E /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A1AE07D4170741AC0028A95E /* Default@2x.png */; };
A1AE07D7170741AC0028A95E /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A1AE07D6170741AC0028A95E /* Default-568h@2x.png */; };
A1AE07DA170741AC0028A95E /* ALViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A1AE07D9170741AC0028A95E /* ALViewController.m */; };
A1C48A15181060B500734781 /* UIGestureRecognizer+ALActionBlocks.m in Sources */ = {isa = PBXBuildFile; fileRef = A1C48A14181060B500734781 /* UIGestureRecognizer+ALActionBlocks.m */; };
A1F120D11733050400363A8F /* UIControl+ALActionBlocks.m in Sources */ = {isa = PBXBuildFile; fileRef = A1F120D01733050400363A8F /* UIControl+ALActionBlocks.m */; };
/* End PBXBuildFile section */

Expand All @@ -43,6 +44,8 @@
A1AE07D6170741AC0028A95E /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
A1AE07D8170741AC0028A95E /* ALViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ALViewController.h; sourceTree = "<group>"; };
A1AE07D9170741AC0028A95E /* ALViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ALViewController.m; sourceTree = "<group>"; };
A1C48A13181060B500734781 /* UIGestureRecognizer+ALActionBlocks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIGestureRecognizer+ALActionBlocks.h"; sourceTree = "<group>"; };
A1C48A14181060B500734781 /* UIGestureRecognizer+ALActionBlocks.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIGestureRecognizer+ALActionBlocks.m"; sourceTree = "<group>"; };
A1F120CF1733050400363A8F /* UIControl+ALActionBlocks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIControl+ALActionBlocks.h"; sourceTree = "<group>"; };
A1F120D01733050400363A8F /* UIControl+ALActionBlocks.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIControl+ALActionBlocks.m"; sourceTree = "<group>"; };
A1F120D21733052200363A8F /* ALActionBlocks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ALActionBlocks.h; sourceTree = "<group>"; };
Expand Down Expand Up @@ -127,6 +130,8 @@
A10AE4811745784800EEC209 /* UIBarButtonItem+ALActionBlocks.m */,
A1F120CF1733050400363A8F /* UIControl+ALActionBlocks.h */,
A1F120D01733050400363A8F /* UIControl+ALActionBlocks.m */,
A1C48A13181060B500734781 /* UIGestureRecognizer+ALActionBlocks.h */,
A1C48A14181060B500734781 /* UIGestureRecognizer+ALActionBlocks.m */,
);
name = ALActionBlocks;
path = ../../ALActionBlocks;
Expand Down Expand Up @@ -199,6 +204,7 @@
buildActionMask = 2147483647;
files = (
A1AE07CD170741AC0028A95E /* main.m in Sources */,
A1C48A15181060B500734781 /* UIGestureRecognizer+ALActionBlocks.m in Sources */,
A1AE07D1170741AC0028A95E /* ALAppDelegate.m in Sources */,
A1AE07DA170741AC0028A95E /* ALViewController.m in Sources */,
A1F120D11733050400363A8F /* UIControl+ALActionBlocks.m in Sources */,
Expand Down
7 changes: 6 additions & 1 deletion Demo/ALActionBlocks/ALViewController.m
Expand Up @@ -39,7 +39,6 @@ - (void)viewDidLoad {

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:@[@"One", @"Two", @"Three"]];
segmentedControl.frame = CGRectMake(88, 220 + 64, 143, 30);
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
[segmentedControl handleControlEvents:UIControlEventValueChanged withBlock:^(id weakControl) {
NSLog(@"selected segment: %@", [segmentedControl titleForSegmentAtIndex:segmentedControl.selectedSegmentIndex]);
if (segmentedControl.selectedSegmentIndex == 2) {
Expand All @@ -65,6 +64,12 @@ - (void)viewDidLoad {
NSLog(@"pow!");
}];
[toolbar setItems:@[powButton]];

__weak ALViewController *wSelf = self;
UIPanGestureRecognizer *gr = [[UIPanGestureRecognizer alloc] initWithBlock:^(UIPanGestureRecognizer *weakGR) {
NSLog(@"pan %@", NSStringFromCGPoint([weakGR locationInView:wSelf.view]));
}];
[self.view addGestureRecognizer:gr];
}

@end

0 comments on commit 7dc6af1

Please sign in to comment.