请转到: http://isotope.metafizzy.co/demos/elements-complete.html
我想在iPhone上实现“Toggle variable size”部分。
更具体地说,我想在滚动视图上布置我的30多张照片(相同尺寸),我希望它看起来像“Toggle variable size”看起来像。
实现需要是原生的,我想通过视图控制器或一些带有自定义单元格的表视图。
您对iPhone上实现此功能的最佳方法有什么想法吗?
答案 0 :(得分:1)
在这个答案中,我将对如何解决你的问题提出一个非常高级的概述。
创建一个自定义滚动视图子类,比如说TiledGridView
。为简单起见,我们假设界面看起来像这样:
@interface TiledGridView : UIScrollView {
NSArray *tileData;
}
@property(retain) NSArray *tileData;
- (void)layoutSubviews;
@end
tileData
数组包含有关切片(位置,大小和图像)的信息。在最简单的情况下,使用合成访问器设置tileData
。您可以创建实际计算切片位置的ViewController,也可以在视图中添加方法。为了进一步讨论,我们假设tileData
包含了我们需要的所有数据的所有数据,并且我们已经知道他们的位置等。
然后,最重要的部分是覆盖子类中的layoutSubviews
消息。在layoutSubviews中,您将执行以下操作:
TiledGridView
UIImageView
s(或任何您喜欢的内容)您可以这样做,以便在有许多图像时不会耗尽内存。这也是UITableView的功能,但它们甚至可以重用视图。
伪实现看起来与此类似:
- (void)layoutSubviews {
CGRect bounds = self.bounds;
for (id tile in tileData) {
if (/*tile is not yet visible and tile overlaps bounds*/) {
UIView newTileView = /* create the view for the tile */
[self insertSubview:newTileView atIndex:0];
} else if (/*tile is visible and no longer overlaps bounds*/) {
UIView oldTileView = /* fetch the corresponding view */
[oldTileView removeFromSuperview];
}
}
这会使您的观看速度非常快,因为只会根据需要添加子视图。