使用layoutsubviews()在骑uibuttons骑自行车时正常工作,但在通过标签检索时骑自行车时不工作
-
09-10-2019 - |
题
我正在尝试模仿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
然后继续更改 frame
的 self
, ,弄乱布局和功能。我通过在初始化时将视图标签更改为999来解决这一困境。
其他提示
在我看来,你有背景 UIImage
提供灰色梯度背景。看起来还像您的按钮 0
可能有一个 [cell order]
of0。我猜想您从未更改过背景的标签 UIImage
, ,因此默认为0。
你打电话时 [self viewWithTag]
为了第一 UIButton
(标记为0),它将找到带有标签0的第一个子视图 - 背景图像,而不是 UIButton
您期望 - 然后移动。我怀疑这个。这就是为什么所有其他按钮都可以排队的原因,为什么背景会奇怪地移动以及为什么您的0按钮不可见。