Я пытаюсь имитировать функцию перетаскивания iPhone Springboard для игры с черепицей, и в настоящее время я использую MatrixCells для создания UIButtons в Просмотрите инициализацию и добавьте их в представление. MatrixCells имеют тег order
, который также используется для собственной кнопки ([button setTag:[cell order]];
).Использование layoutsubviews() корректно работает при циклическом перемещении по UIButtons, но не при циклическом перемещении при извлечении их по тегу
При использовании `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
казалось наиболее элегантное решение для этого. Поэтому я в недоумении. Любая идея, почему эти реализации не делают то же самое?
Не совсем правильно, но это привело меня на правильный путь. Я просто установил 'UIColor' для фона, и кнопки просто имеют' setImage'. Однако '[self viewWithTag: 0]' возвратил 'self', конечно, полностью испортил свой фрейм, забыв о кнопке 0 и не разрешив мне доступ к другим кнопкам (так как рамка не дошла так далеко). Но я решил, так спасибо! Какой протокол сейчас, я считаю этот ответ правильным? Или я должен ответить на свой вопрос? – SpacyRicochet
Ах, моя психическая отладка не удалась (но только просто!). В этом случае я, вероятно, напишу свой собственный ответ и соглашусь с этим. Но upvote никогда не сходит с ума;) –
Увы, я все еще скромный студент, даже не имеющий достаточной репутации для голосования. Но когда это станет возможным, я обязательно сделаю это :) – SpacyRicochet