Q:

UISwipeGesture Not working using custom UIView

Here's my GameViewController.m file:
- (void)viewDidLoad {
    [super viewLoad];
    .
    .
    .
    _board = [[TwinstonesBoardModel alloc] init];
    [_board setToInitialStateMain];
    TwinstonesStoneView* twinstonesBoard = [[TwinstonesStoneView alloc]
                                      initWithMainFrame:CGRectMake(12, 160, 301.5, 302.5)
                                      andBoard:_board];
    [self.view addSubview:twinstonesBoard];

    TwinstonesStonesView *stoneOne = [[TwinstonesStoneView alloc] init];
    TwinstonesStonesView *one = (TwinstonesStoneView*)stoneOne.stoneUnoView;
    TwinstonesStonesView *stoneTwo = [[TwinstonesStoneView alloc] init];
    TwinstonesStonesView *two = (TwinstonesStoneView*)stoneTwo.stoneDueView;

    UISwipeGestureRecognizer* swipeLeft = [[UISwipeGestureRecognizer alloc]
                                         initWithTarget:self
                                         action:@selector(swipeLeft:)];
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
    swipeLeft.numberOfTouchesRequired = 1;
    [one addGestureRecognizer:swipeLeft];
    [two addGestureRecognizer:swipeLeft];

Here's the relevant code in my TwinstonesStoneView.m file:
@implementation TwinstonesStoneView
{
    NSMutableArray* _array;
    NSMutableArray* _emptyArray;
    CGRect _frame;
    NSUInteger _column;
    NSUInteger _row;
    TwinstonesBoardModel* _board;

    int _i;
}

- (id)initWithMainFrame:(CGRect)frame andBoard:
                                   (TwinstonesBoardModel*)board
{
  if (Self = [super initWithFrame:frame])
  {
    float rowHeight = 49.0;
    float columnWidth = 49.0;
    float barrierHorizontalRowHeight = 12.5;
    float barrierVerticalColumnWidth = 12.5;

    for (int row = 0; row < 5; row++) 
    {
      for (int col = 0; col < 5; col++)
      {
        TwinstonesStonesView* square = [[TwinstonesStoneView alloc]
             initWithEmptyFrame:CGRectFrame(//spacial equations, not important)
             column:col
             row:row
             board:board];

        BoardCellState state = [board cellStateAtColumn:col andRow:row];

        if (state == BoardCellStateStoneOne) {
            // _stoneUnoView is a public property
            // 'stoneOneCreation' creates a UIImageView of the stone
            _stoneUnoView = [UIImageView stoneOneCreation];
            [self addSubview:square];
            [square addSubview:_stoneUnoView];
            [_array insertObject:_stoneUnoView atIndex:0];
        } else if (state == BoardCellStateStoneTwo) {
            // same idea as above
            _stoneDueView = [UIImageView stoneTwoCreation];
            [self addSubview:square];
            [square addSubview:_stoneDueView];
            [_array insertObject:_stoneDueView atIndex:1];
        } else {
            // based on the 'init' method I write below, I assumed this
            // would return an empty square cell
            [self addSubview:square];
            [_emptyArray insertObject:square atIndex:_i];
            _i++;
        }
      }
    }
    self.backgroundColor = [UIColor clearColor];
  }
  return self;
}

- (UIView*)stoneUnoView {
    return _stoneUnoView;
}

- (UIView*)stoneDueView {
    return _stoneDueView;
}

- (id)initWithEmptyFrame:(CGRect)frame
                  column:(NSUInteger)column
                     row:(NSUInteger)row
                   board:(TwinstonesBoardModel*)board
{
    self = [super initWithFrame:frame];
    return self;
}

- (void)swipeLeft:(UIGestureRecognizer*)recognizer
{
    NSLog(@"Swipe Left");
    UIView* view = recognizer.view;
    [self move:CGPointMake(-1, 0) withView:view];
}

- (void)move:(CGPoint)direction withView:view {
    // whatever code I decide to put for stone movement
}

@end

I apologize for the (probably) unnecessary length, I've just trying to figure this out for a couple days and have had no luck. Here's the bullet points of what I'm trying to do:     

setInititalStateMain sets the placements of two stones in a 5x5 grid     
In GameViewController.m, I'm trying to capture the 'stoneUnoView' and 'stoneDueView' properties (set in the TwinstonesStoneView.m file), give them swipe gestures, and interact with them using the methods provided in TwinstonesStoneView.m.     
Am I generating too many views? The catch is that everything works in terms of what I'm able to see on my IPhone when I run the program. The stones show up on my screen, but when I try to interact with them, not even the 'NSLog' message shows up in the console.
The 'stoneOneCreation' method (and ...two) are UIImageView's, but, as you can see, I store them in a UIView pointer.
I also used '[one setUserInteractionEnabled:YES]' (and ...two) but that didn't help either.     
If I add the gesture recognizer to self.view, everything works (the displays of the stones, gameboard, and other graphics appears, and when I interact with ANY part of the screen, I output the directions to the console......just not stone-specific interaction).    

Thank you so very much for putting up with all of this, this will really help if someone knows what's wrong. PS: all file #import's are correct, so that isn't a problem.
I am using XCode 7, Objective-C language, and developing for iOS
Anthony

A:

You should add different instances of the swipe gesture recogniser to different instances of UIView.
UISwipeGestureRecognizer* swipeLeft1 = [[UISwipeGestureRecognizer alloc]
                                     initWithTarget:self
                                     action:@selector(swipeLeft:)];
swipeLeft1.direction = UISwipeGestureRecognizerDirectionLeft;
swipeLeft1.numberOfTouchesRequired = 1;
[one addGestureRecognizer:swipeLeft1];

 UISwipeGestureRecognizer* swipeLeft2 = [[UISwipeGestureRecognizer alloc]
                                     initWithTarget:self
                                     action:@selector(swipeLeft:)];
swipeLeft2.direction = UISwipeGestureRecognizerDirectionLeft;
swipeLeft2.numberOfTouchesRequired = 1;
[two addGestureRecognizer:swipeLeft2];

I assume it is because the gestire recogniser has readonly view property.

