Использование MayoutoutSubviews () работает должным образом при езде на велосипеде через Uibuttons, но не при езде на велосипеде при получении их по тегу
-
09-10-2019 - |
Вопрос
Я пытаюсь имитировать функциональность перетаскивания и падения iPhone для игры в плитку и в настоящее время использую Matrixcells для генерации Uibuttons в просмотре итализации и добавляю их в вид. У матрикселей есть order
тег, который также используется для их собственной кнопки ([button setTag:[cell order]];
).
При использовании `LayoutoutSubviews 'для прохождения 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
казалось, что быть самым элегантным решением для этого. Так что я в растерянности. Есть идеи, почему эти реализации не делают то же самое?
Решение 2
[self viewWithTag:0]
возврат self
Во -первых, вместо ожидаемого (UIButton *)
, так как я не изменил представление tag
После инициализации. Очевидно отмечает дефолт до 0 при инициализации. layoutsubviews
затем приступил к изменению frame
из self
, испортить макет и функциональность. Я решил эту дилемму, изменив тег представления на 999 при инициализации.
Другие советы
Мне это кажется, как будто у тебя есть фон UIImage
Чтобы обеспечить этот серый градиент фон. Также выглядит как ваша кнопка 0
может быть [cell order]
0. Я догадаюсь, что вы никогда не меняли бирку своего фона UIImage
, что, таким образом, не по умолчанию до 0.
Когда вы звоните [self viewWithTag]
во-первых UIButton
(помечен 0), он найдет первый подвесок с тегом 0 - фоновое изображение, а не UIButton
Вы ожидали - и переместите это. Это, я подозреваю. Вот почему все остальные кнопки в порядке, почему фон странным образом движется, и почему ваша кнопка 0 не видна.