Как создать сетку иконок, например домашний экран iPhone? - PullRequest
11 голосов
/ 03 февраля 2009

Как мне создать пользовательский интерфейс, похожий на Springboard (домашний экран) на iPhone? Мне нужна сетка из равномерно расположенных кнопок с изображениями, где я могу реагировать на нажатие кнопки.

Подходит ли UITable? Должен ли я использовать простой UIView и расположить значки вручную в DrawRect? Есть ли альтернатива, которая будет автоматически равномерно распределять кнопки, разрешать реорганизацию и настраивать макет в соответствии с ориентацией iPhone?

Я родом из C # / Winforms и только сейчас начинаю разработку iPhone для Open Toolchain с заголовками 2.2.1.

Ответы [ 6 ]

6 голосов
/ 06 февраля 2010

Я написал пример кода, чтобы сделать что-то вроде этого. Смотрите мою Tiles запись в блоге или просто загрузите код: Tiles-v1.0.zip .

Мой код создает значки в виде слоев Core Animation, а не UIViews, но демонстрирует, как обнаруживать касания и разрешать реорганизацию значков. Он не обрабатывает изменения ориентации.

4 голосов
/ 29 июня 2010

Старый поток, но вы также должны проверить AQGridView Alan Quartrmain.

2 голосов
/ 03 февраля 2009

Вы должны добавить свои значки (которые являются видами UIViews) как подпредставления вашего представления "Springboard". Не нужно никакого специального чертежа, и UITable - это абсолютно неверный путь. Вам просто нужно сделать математику, чтобы правильно разместить их (установив их рамку).

1 голос
/ 04 февраля 2009

@ Август: я воспользовался вашим советом и добавил кнопки UIB в качестве подпредставлений UIView, а не заглядывал в UITable. Спасибо!

Надеюсь, приведенный ниже код поможет запустить кого-то еще. Я статически разместил 4 кнопки в сетке. Не должно быть намного сложнее разместить любое количество кнопок в соответствии с границами и ориентацией родительского UIView.

@implementation IconView
- (id)initWithFrame:(struct CGRect)windowRect{
  self = [super initWithFrame: windowRect];
  if (self != nil){
    for(int i = 0; i < 4; i++){
      buttons[i] = [self buildButton];
      [self addSubview: buttons[i]];
    }
    [self reInit];
  }
  return self;
}
- (UIButton *) buildButton{
  UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 60)];
  [button setBackgroundImage: [[UIImage imageNamed:@"icon.png"] stretchableImageWithLeftCapWidth:60 topCapHeight:0] forState:UIControlStateNormal];
  return [button autorelease];
}
- (void)reInit{
  CGRect rect;
  rect = buttons[0].frame;
  rect.origin = CGPointMake(5, 5);
  buttons[0].frame = rect;

  rect = buttons[1].frame;
  rect.origin = CGPointMake(70, 5);
  buttons[1].frame = rect;

  rect = buttons[2].frame;
  rect.origin = CGPointMake(5, 70);
  buttons[2].frame = rect;

  rect = buttons[3].frame;
  rect.origin = CGPointMake(70, 70);
  buttons[3].frame = rect;
}
@end
0 голосов
/ 16 марта 2011

Как указано выше, использование UIView и математика для разметки представлений - самый простой вариант.

проверьте пример кода с сайта developer.apple.com https://developer.apple.com/library/ios/#samplecode/PageControl/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007795

В зависимости от ваших требований, вам может не потребоваться использовать какую-либо внешнюю среду.

0 голосов
/ 23 января 2010

Используйте реализацию gridView от Arijasoft. Это статическая библиотека, которая позволяет генерировать вид сетки с обратными вызовами и делегировать методы для оптимизации

...