我正在尝试为瓷砖游戏模仿 iPhone Springboard 拖放功能,目前正在使用 MatrixCells 在视图初始化中生成 UIButtons 并将它们添加到视图中。MatrixCells 有一个order
标签,它也用于它们自己的按钮 ( [button setTag:[cell order]];
)。
当使用 `layoutSubviews' 循环浏览视图中的 UIButtons 以将它们排列在网格中时,它可以正常工作。网格弹出,我的拖动功能允许我随意拖动按钮。
- (void)layoutSubviews {
int row = 0;
int col = 0;
for ( UIButton *button in [self subviews] ) {
[button setFrame:CGRectMake( col * 80 + 5, row * 80 + 25, 70, 70)];
if (col < 3) {
col++;
}
else {
row++;
col = 0;
}
}
}
但是,在更改单元格的顺序时,循环通过subviews
不起作用,因为我很确定我根本不应该在那里乱搞。所以,我想循环浏览我的MatrixCells
并使用它们order
来获得适当的视图,然后更改frame
. 但是,布局在按钮 0 处变得混乱,我不能再将它们用作按钮。
- (void)layoutSubviews {
int row = 0;
int col = 0;
for (MatrixCell *cell in currentOrder) {
UIView *view = [self viewWithTag:[cell order]];
[view setFrame:CGRectMake( col * 80 + 5, row * 80 + 25, 70, 70 )];
if (col < 3) {
col++;
}
else {
row++;
col = 0;
}
}
}
这是一张带有结果的图片:http: //i52.tinypic.com/2q903lk.png
viewWithTag
似乎是最优雅的解决方案。所以我很茫然。知道为什么这些实现不呈现相同的吗?