使用layoutsubviews()在骑uibuttons骑自行车时正常工作,但在通过标签检索时骑自行车时不工作

StackOverflow https://stackoverflow.com/questions/4659788

我正在尝试模仿iPhone Springboard拖放功能以在瓷砖游戏中拖放功能,并且目前正在使用矩阵在视图中生成Uibuttons,并将其添加到视图中。矩阵有一个 order 标签,也用于自己的按钮([button setTag:[cell order]];).

当使用“ Layoutsubviews”在视图中将其排列在网格中时,它可以正常工作。网格弹出,我的拖动功能使我可以在我所愿意的地方释放按钮。

- (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 似乎是最优雅的解决方案。所以我不知所措。知道为什么这些实现不相同吗?

有帮助吗?

解决方案 2

[self viewWithTag:0] 返回 self 首先,而不是预期 (UIButton *), ,因为我没有改变视图 tag 初始化。显然在初始化时标记为0。 layoutsubviews 然后继续更改 frameself, ,弄乱布局和功能。我通过在初始化时将视图标签更改为999来解决这一困境。

其他提示

在我看来,你有背景 UIImage 提供灰色梯度背景。看起来还像您的按钮 0 可能有一个 [cell order] of0。我猜想您从未更改过背景的标签 UIImage, ,因此默认为0。

你打电话时 [self viewWithTag] 为了第一 UIButton (标记为0),它将找到带有标签0的第一个子视图 - 背景图像,而不是 UIButton 您期望 - 然后移动。我怀疑这个。这就是为什么所有其他按钮都可以排队的原因,为什么背景会奇怪地移动以及为什么您的0按钮不可见。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top