0

我有一个名为 TileView 的类,它扩展了 UIView。在另一个视图中,我创建了 9 个 TileView 对象并将它们显示在屏幕上。以下是其中 1 个的示例

tile1 = [[TileView alloc]
             initWithFrame:CGRectMake(20,20, 100, 150)
             withImageNamed:@"tile1.png"
             value: 1
             isTileFlipped: NO];

用户可以触摸任何瓷砖。当一个瓷砖被触摸时,它被“翻转”——图像被命名为一个普通的棕色瓷砖,并isTileFlipped设置为“是”。现在是我坚持的部分:有一个确认按钮。

当按下确认按钮时,它会获取所有翻转的图块并将它们添加到一个名为 的数组acceptedTiles中。按下确认后,我需要确保acceptedTiles无法按下或与之交互的瓷砖。我不知道什么是最好的方法。在这里touchesBegan,您可以了解正在发生的事情。

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

int currentTileCount = [(BoxView *)self.superview getTileCount];
int currentTileValue = [self getTileValue];
int tilecount;

if (!isFlipped) {
    [image setImage:[UIImage imageNamed:@"tileflipped.png"]];
    isFlipped = YES;
    tilecount = currentTileCount + currentTileValue;
    [(BoxView *)self.superview setTileCount:tilecount];
    [(BoxView *)self.superview addToArray:self index:currentTileValue-1];
}

else {
    [image setImage:[UIImage imageNamed:imageNamed]];
    isFlipped = NO;
    tilecount = currentTileCount - (int)currentTileValue;
    [(BoxView *)self.superview setTileCount:tilecount];
    [(BoxView *)self.superview removeFromArray: currentTileValue-1];
}
}
4

2 回答 2

1

如果您想要的只是不与之交互的图块,那么肯定很简单:

for (UIView *tile in acceptedTiles) {
    [tile setUserInteractionEnabled:NO];
}

如果这不符合您的要求,请详细说明。它对你来说似乎很完美。

于 2013-04-13T14:22:46.383 回答
0

如果您不想过多地更改代码,则可以acceptedTiles在执行任何其他操作之前检查视图是否已添加touchesBegan:withEvent,以及是否只是返回。

但是,我想知道你为什么不在UITapGestureRecognizer这里使用 a 呢?如果您这样做了,您可以设置一个委托来实现该gestureRecognizerShouldBegin:方法,您可以在其中检查视图是否在acceptedTiles其中,而不是将其与您的其他点击识别逻辑混合。

于 2013-04-13T14:20:53.807 回答