Как мне создать сетку значков, подобную начальному экрану iPhone?

StackOverflow https://stackoverflow.com/questions/508167

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

Я написал несколько примеров кода, чтобы сделать что-то подобное.Видишь мой Плитки запись в блоге или просто скачайте код: Tiles-v1.0.zip.

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

Старая тема, но вам стоит почитать книгу Алана Квотрмейна. AQGridView ( Просмотр сетки) слишком.

@Август:Я последовал вашему совету и добавил UIButtons в качестве подвидов 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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top