У меня есть пользовательский UIView, который генерирует набор подпредставлений и отображает их в строках и столбцах, таких как плитки. То, чего я пытаюсь добиться, - это позволить пользователю дотронуться до экрана, и по мере движения пальца плитки под ним исчезают.
Код ниже является пользовательским UIView, который содержит плитки:
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
int i, j;
int maxCol = floor(self.frame.size.width/TILE_SPACING);
int maxRow = floor(self.frame.size.height/TILE_SPACING);
CGRect frame = CGRectMake(0, 0, TILE_WIDTH, TILE_HEIGHT);
UIView *tile;
for (i = 0; i<maxCol; i++) {
for (j = 0; j < maxRow; j++) {
frame.origin.x = i * (TILE_SPACING) + TILE_PADDING;
frame.origin.y = j * (TILE_SPACING) + TILE_PADDING;
tile = [[UIView alloc] initWithFrame:frame];
[self addSubview:tile];
[tile release];
}
}
}
return self;
}
- (void)touchesBegan: (NSSet *)touches withEvent:(UIEvent *)event {
UIView *tile = [self hitTest:[[touches anyObject] locationInView:self] withEvent:nil];
if (tile != self)
[tile setHidden:YES];
}
- (void)touchesMoved: (NSSet *)touches withEvent:(UIEvent *)event {
UIView *tile = [self hitTest:[[touches anyObject] locationInView:self] withEvent:nil];
if (tile != self)
[tile setHidden:YES];
}
Этот подход работает, но, тем не менее, если плитки становятся более плотными (то есть маленькие плитки и больше плиток на экране). IPhone меньше реагирует на движение пальца. Это может быть хит-тест, который отнимает у процессора все меньше усилий, но ему хотелось бы получить некоторые мнения.
Мои вопросы:
Является ли это эффективным / правильным способом реализации touch-Moveed?
Если это не так, каков будет рекомендуемый подход?
Я попытался переместить функциональность в пользовательский класс Tile (под UIView), который класс, созданный выше, будет создавать и добавлять в качестве подпредставления. Эта плитка подпредставления может обрабатывать TouchesBegan, но при перемещении пальца другие плитки не получают TouchesBegan, даже если касания все еще являются частью начальной последовательности касаний. Есть ли способ реализовать его через класс плиток subview, как другие плитки получают событие TouchesBegan / TouchesMoved при движении пальца?