У меня есть настраиваемый 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 менее отзывчив на движение пальца. Это может быть хит-тест, который сказывается на процессоре, поскольку он изо всех сил пытается успевать, но хотелось бы получить некоторые мнения.
Мои вопросы:
Это эффективный / правильный способ реализовать touchMoved?
Если нет, то какой подход рекомендуется?
Я попытался переместить функциональность в пользовательский класс Tile (подчиненный UIView), который класс выше создаст и добавит в качестве подчиненного представления. Этот элемент подвида Tile может обрабатывать TouchesBegan, но по мере движения пальца другие плитки не получают TouchesBegan, даже если прикосновения все еще являются частью начальной последовательности касаний. Есть ли способ реализовать это через класс Tile subview, как другие плитки получают событие TouchesBegan / TouchesMoved при перемещении пальца?