11

我应该如何在 iPhone 上创建类似于 Springboard(主屏幕)的 UI?我想要一个带有图像的均匀间隔按钮网格,我可以在其中响应按钮点击。

UITable 是否合适?我应该使用普通的 UIView 并在 DrawRect 中手动定位图标吗?是否有替代方案可以自动均匀地排列按钮、允许重新组织并根据 iPhone 方向调整布局?

我来自 C#/Winforms 背景,现在刚刚开始使用 2.2.1 标头在 Open Toolchain 上进行 iPhone 开发。

4

6 回答 6

6

我写了一些示例代码来做这样的事情。请参阅我的Tiles博客条目,或直接下载代码:Tiles-v1.0.zip

我的代码将图标创建为核心动画层,而不是 UIView,但确实演示了如何检测点击并允许重新组织图标。它不处理方向变化。

于 2010-02-06T04:46:16.133 回答
4

旧线程,但您也应该查看 Alan Quartrmain 的AQGridView

于 2010-06-29T17:45:41.753 回答
2

您需要将您的图标(它们是某种 UIViews)添加为“Springboard”视图的子视图。不需要自定义绘图,UITable 是绝对错误的方法。您只需要进行数学运算即可正确放置它们(通过设置它们的框架)。

于 2009-02-03T19:38:41.060 回答
1

@August:我听取了您的建议并将 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
于 2009-02-04T20:06:07.353 回答
0

使用 Arijasoft 的 gridView 实现。它是一个静态库,可让您使用回调和委托方法生成网格类型的视图以进行优化

于 2010-01-23T10:50:51.767 回答
0

如上所述,使用 UIView 并进行数学布局视图是最简单的选择。

从 developer.apple.com 检查示例代码https://developer.apple.com/library/ios/#samplecode/PageControl/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007795

根据您的要求,您可能不需要使用任何外部框架。

于 2011-03-16T19:50:14.447 回答