我应该如何在 iPhone 上创建类似于 Springboard(主屏幕)的 UI?我想要一个带有图像的均匀间隔按钮网格,我可以在其中响应按钮点击。
UITable 是否合适?我应该使用普通的 UIView 并在 DrawRect 中手动定位图标吗?是否有替代方案可以自动均匀地排列按钮、允许重新组织并根据 iPhone 方向调整布局?
我来自 C#/Winforms 背景,现在刚刚开始使用 2.2.1 标头在 Open Toolchain 上进行 iPhone 开发。
我应该如何在 iPhone 上创建类似于 Springboard(主屏幕)的 UI?我想要一个带有图像的均匀间隔按钮网格,我可以在其中响应按钮点击。
UITable 是否合适?我应该使用普通的 UIView 并在 DrawRect 中手动定位图标吗?是否有替代方案可以自动均匀地排列按钮、允许重新组织并根据 iPhone 方向调整布局?
我来自 C#/Winforms 背景,现在刚刚开始使用 2.2.1 标头在 Open Toolchain 上进行 iPhone 开发。
我写了一些示例代码来做这样的事情。请参阅我的Tiles博客条目,或直接下载代码:Tiles-v1.0.zip。
我的代码将图标创建为核心动画层,而不是 UIView,但确实演示了如何检测点击并允许重新组织图标。它不处理方向变化。
旧线程,但您也应该查看 Alan Quartrmain 的AQGridView。
您需要将您的图标(它们是某种 UIViews)添加为“Springboard”视图的子视图。不需要自定义绘图,UITable 是绝对错误的方法。您只需要进行数学运算即可正确放置它们(通过设置它们的框架)。
@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
使用 Arijasoft 的 gridView 实现。它是一个静态库,可让您使用回调和委托方法生成网格类型的视图以进行优化
如上所述,使用 UIView 并进行数学布局视图是最简单的选择。
从 developer.apple.com 检查示例代码https://developer.apple.com/library/ios/#samplecode/PageControl/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007795
根据您的要求,您可能不需要使用任何外部框架。