iPhone/iPad SDK:主屏幕/照片样式的网格视图?

iPhone/iPad SDK:主屏幕/照片样式的网格视图?,iphone,cocoa-touch,ipad,Iphone,Cocoa Touch,Ipad,我正在构建一个iPad应用程序,并希望使用一个“平铺”显示屏,将对象排列成可滚动的网格,类似于iPhone/iPad主屏幕和iPad照片应用程序 我正在努力实现的目标: SDK中是否有任何预构建的方法来实现这一点?如果没有,我应该如何着手创建自己的 更新:我想我知道如何在网格中对“对象”进行基本排列,但我不知道如何在不使用大量内存的情况下使用数千个对象和一个可滚动的视图来实现这一点,并且使一切都变得非常缓慢(再说一次,我仍然没有可以测试的设备) 更新2: 半个月后,我终于找到了理想的解决

我正在构建一个iPad应用程序,并希望使用一个“平铺”显示屏,将对象排列成可滚动的网格,类似于iPhone/iPad主屏幕和iPad照片应用程序


我正在努力实现的目标:

SDK中是否有任何预构建的方法来实现这一点?如果没有,我应该如何着手创建自己的

更新:我想我知道如何在网格中对“对象”进行基本排列,但我不知道如何在不使用大量内存的情况下使用数千个对象和一个可滚动的视图来实现这一点,并且使一切都变得非常缓慢(再说一次,我仍然没有可以测试的设备)



更新2:
半个月后,我终于找到了理想的解决方案:

我不知道有什么预构建的方法可以做到这一点,但通常有两种方法可以采用:

1) 如果网格不会(真的)改变,您可以直接在interface builder中创建它

2) 如果需要更灵活的方法,可以通过计算每个元素的适当位置,以编程方式在UIViewController中构建网格。例如:

for(int i=0 ; i<num_rows ; i++) {
    for(int j=0 ; j<num_cols ; j++) {
        UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(j*50, i*50, 40, 40)] ;
        [self.view addSubview:myView] ;
        [myView release] ;
    }
}

for(int i=0;i我不知道有任何预构建的方法可以做到这一点,但通常有两种方法可以采用:

1) 如果网格不会(真的)改变,您可以直接在interface builder中创建它

2) 如果需要更灵活的方法,可以通过计算每个元素的适当位置,以编程方式在UIViewController中构建网格。例如:

for(int i=0 ; i<num_rows ; i++) {
    for(int j=0 ; j<num_cols ; j++) {
        UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(j*50, i*50, 40, 40)] ;
        [self.view addSubview:myView] ;
        [myView release] ;
    }
}

for(int i=0;i我建议使用库并调整TTLauncher视图控制器。

我建议使用库并调整TTLauncher视图控制器。

对包含所有平铺的视图使用或派生UIScrollView。实现委托
-(void)scrollViewDidScroll:(UIScrollView*)scrollView;
方法或重写
-(void)setContentOffset:(CGPoint)contentOffset
方法。将滚动视图的内容大小设置为所有分幅都存在

当滚动视图滚动时,确定屏幕上将显示哪些磁贴。然后使用循环方案,就像UITableView对单元格所做的那样,或者根据需要添加新创建的磁贴,并在达到内存配额时删除离可见区域最远的磁贴。您的示例显示2x3磁贴完全可见,因此您可以重新创建ed至少保留4x5瓷砖

如果您有两列平铺并且没有水平滚动(从图片中看不清楚),您可以直接使用UITableView并实现显示两个平铺的自定义UITableViewCell


如果您是从UIScrollView派生的,最好的做法是将UITableView使用的接口镜像到dataSource和委托回调。您可以使用numberOfRows:、numberOfColumns:和tileForRow:column:而不是numberOfRows:、numberOfSections:、cellForIndexPath:但主体是相同的。看起来您可以使用大小固定的分幅,简化了很多事情。

对包含所有分幅的视图使用或派生UIScrollView。可以实现委托
-(void)scrollViewDidScroll:(UIScrollView*)scrollView;
方法,也可以覆盖
-(void)setContentOffset:(CGPoint)contentOffset
方法。将滚动视图的内容大小设置为所有平铺都存在

当滚动视图滚动时,确定屏幕上将显示哪些磁贴。然后使用循环方案,就像UITableView对单元格所做的那样,或者根据需要添加新创建的磁贴,并在达到内存配额时删除离可见区域最远的磁贴。您的示例显示2x3磁贴完全可见,因此您可以重新创建ed至少保留4x5瓷砖

如果您有两列平铺并且没有水平滚动(从图片中看不清楚),您可以直接使用UITableView并实现显示两个平铺的自定义UITableViewCell


如果您是从UIScrollView派生的,最好的做法是将UITableView使用的接口镜像到dataSource和委托回调。您可以使用numberOfRows:、numberOfColumns:和tileForRow:column:而不是numberOfRows:、numberOfSections:、cellForIndexPath:但主体是相同的。看起来您可以使用大小固定的平铺,简化了很多事情。

您可以使用UITableView,在它们之间没有线条的行,并使用四种不同类型的行,每个行包含两个子视图。这将为您处理视图的所有缓存。然后您可以忽略didSelect…,只需对添加到contentView的视图进行触摸即可单元格的缓存。

您可以使用UITableView,在它们之间有没有行,并使用四种不同类型的行,每种行包含两个子视图。这将为您处理视图的所有缓存。然后您可以忽略didSelect…,只需对添加到单元格内容视图中的视图进行触摸。

替换UIView对于UIView2的任何自定义子类,我早就想到了#2,但我的问题出现在处理数千个项目和滚动等时。我必须重建UITableView类的东西吗?用我早就想到#2的任何自定义UIViews子类替换UIView,但我的问题出现在处理数千个项目和滚动等时。是吗我必须重建一个UITableView类的东西?谢谢-这帮了大忙。在我的实现中,我将布局代码放在UIScrollView子类的
layoutSubviews
中,这似乎工作得很好。您有什么特别的原因建议我实现
scrollViewDidScroll:
?您可以选择从UIScrollView派生还是从UIScrollView派生代理。如果您选择成为vanilla UIScrollView的代理,您可以在scrollViewDidScroll中完成布局工作。啊,好的。明白了!仅供参考:完毕