Автоматически размещать представления в следующем логическом месте (например, в менеджере компоновки) - PullRequest
1 голос
/ 28 мая 2011

Я разрабатываю приложение для iPad, которое позволяет пользователю выбирать «виджеты» для отображения на экране. Экран разделен на две колонки, виджеты будут размещены в левой или правой колонке. Каждый виджет является контроллером представления со статической фиксированной шириной, но переменной высотой в зависимости от содержимого виджета. Я ищу способ разместить виджеты на экране, чтобы они автоматически помещались в следующее логическое место - что-то похожее на то, что делал бы менеджер по компоновке в Java.

Я создал метод addWidget, который отслеживает высоту всех виджетов в каждом столбце. Виджеты затем добавляются в столбец с наименьшей высотой. Это работает , но я ищу, возможно, более элегантный способ сделать это или идеи по улучшению текущего решения.

- (void) addWidget:(UIViewController *)controller {

    if(leftHeight <= rightHeight) {
        controller.view.frame = CGRectMake(20.0, leftHeight, controller.view.bounds.size.width, controller.view.bounds.size.height);
        leftHeight = leftHeight + controller.view.bounds.size.height + 20;
    }

    else {
        controller.view.frame = CGRectMake(self.view.bounds.size.width-controller.view.bounds.size.width-20, rightHeight, controller.view.bounds.size.width, controller.view.bounds.size.height);
        rightHeight = rightHeight + controller.view.bounds.size.height + 20;
    }

    [scrollView addSubview:controller.view];
}

Спасибо

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Если вам нужен вид "Springboard" для ваших виджетов, я предлагаю изучить Three20 framework.

Он предлагает класс [TTLauncherView][2], который реализует именно то, что выпоиск, в том числе подкачки страниц, изменение порядка значков и эффект встряхивания при удалении - точно так же, как настоящий Springboard.Его очень легко использовать, когда вы немного узнали о Three20.

Кстати, именно его использует официальное приложение Facebook ...

Если вы не хотитечтобы использовать Three20, вы можете просто взглянуть на реализацию, чтобы решить.

1 голос
/ 28 мая 2011

Я думаю, что это может работать с двумя объектами UITableView, по одному для каждого столбца.Когда вы придете, чтобы добавить новый элемент управления, вам все равно придется выполнить математику, чтобы решить, в какой столбец он входит, но у вас должно быть более легкое время для расположения ячеек по вертикали, потому что табличное представление может это сделать.Если вы в настоящий момент прокручиваете оба столбца вместе, вам нужно следить за прокруткой каждого табличного представления и программно обновлять другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...