Вот мой файл GameViewController.m:
- (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];
Вот соответствующий код в моем файле TwinstonesStoneView.m:
@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
Я извиняюсь за (возможно) ненужную длину, я просто пытался понять это пару дней, и мне не повезло. Вот основные пункты того, что я пытаюсь сделать:
- setInititalStateMain устанавливает размещение двух камней в сетке 5x5
- В GameViewController.m я пытаюсь зафиксировать свойства «stoneUnoView» и «stoneDueView» (установленные в файле TwinstonesStoneView.m), дать им жесты смахивания и взаимодействовать с ними, используя методы, предусмотренные в TwinstonesStoneView.m.
- Я генерирую слишком много просмотров? Загвоздка в том, что все работает с точки зрения того, что я могу видеть на своем iPhone, когда запускаю программу. Камни отображаются на моем экране, но когда я пытаюсь с ними взаимодействовать, в консоли не появляется даже сообщение «NSLog».
- Метод 'stoneOneCreation' (и... два) принадлежат UIImageView, но, как видите, я храню их в указателе UIView.
- Я также использовал «[один setUserInteractionEnabled: YES]» (и ... два), но это тоже не помогло.
- Если я добавляю распознаватель жестов в self.view, то все работает (появляются изображения камней, игрового поля и прочей графики, а когда я взаимодействую с ЛЮБОЙ частью экрана, я вывожу указания на консоль..... .просто не конкретное взаимодействие с камнем).
Большое вам спасибо за то, что мирились со всем этим, это действительно поможет, если кто-то знает, что не так. PS: все файлы #import верны, так что это не проблема.
Я использую XCode 7, язык Objective-C и разрабатываю для iOS.
Anthony