前陣子需要做乙個需求,在iphone上實現瀑布流效果。
第一眼看到這個需求,我想到的兩種解決方案分別是:
1. 使用多個uitableview,然後控制它們同時滾動;
2. 使用乙個uiscrollview,然後參考uitableview的實現自己做乙個符合需求並且以後可以重用的控制項。
我首先嘗試了第乙個方案,並且google過控制多個uitableview同時滾動的**,在stackoverflow裡面找到一段蠻詳細的**了,不過在複雜的使用者操作下,仍然會出現滾動不同步的情況。
最終,我放棄了這個方案。
而第二個方案的關鍵點就在於參考uitableview實現時,如何重用單元格。
下面是我實現的重用**:
- (void)onscroll
}} else
// look back to load visible cells
for (int j = basicvisiblerow - 1; j >= 0; --j)
cell = [self.waterflowdatasource waterflowview:self cellforrowatindexpath:indexpath]; // nil ?
cell.indexpath = indexpath;
cell.frame = cellrect;
if (!cell.superview) [self addsubview:cell];
nslog(@"cell info : %@\n", cell);
[singlevisiblearray insertobject:cell atindex:0];
} else
}// look forward to load visible cells
for (int j = basicvisiblerow + 1; j < [singlerectarray count]; ++j)
cell = [self.waterflowdatasource waterflowview:self cellforrowatindexpath:indexpath]; // nil ?
cell.indexpath = indexpath;
cell.frame = cellrect;
if (!cell.superview) [self addsubview:cell];
nslog(@"cell info : %@\n", cell);
[singlevisiblearray insertobject:cell atindex:0];
} else
}// recycle invisible cells
for (int j = 0; j < [singlevisiblearray count]; ++j) }}
}
主要思想就是,1. 找到乙個需要展示的cell;2. 以這個cell開始,向前、向後推進,為需要展現出來的cell分配;3. 遍歷可見cell,**不可見的物件。
最後,把**稍微做了抽離,弄了個小demo,放到github:
在iOS上實現瀑布流介面
前陣子需要做乙個需求,在iphone上實現瀑布流效果。第一眼看到這個需求,我想到的兩種解決方案分別是 1.使用多個uitableview,然後控制它們同時滾動 2.使用乙個uiscrollview,然後參考uitableview的實現自己做乙個符合需求並且以後可以重用的控制項。我首先嘗試了第乙個方案...
iOS 實現 瀑布流介面
前陣子需要做乙個需求,在iphone上實現瀑布流效果。第一眼看到這個需求,我想到的兩種解決方案分別是 1.使用多個uitableview,然後控制它們同時滾動 2.使用乙個uiscrollview,然後參考uitableview的實現自己做乙個符合需求並且以後可以重用的控制項。我首先嘗試了第乙個方案...
iOS 瀑布流的實現方法
瀑布流 又稱瀑布式流式布局,是比較流行的一種頁面布局,視覺表現為參差不齊的多欄布局,可以參考 或者蘑菇街的客戶端。隨著頁面的滾動,這種布局會不斷的載入資料並附加到當前尾部。實現思路 ios上可以使用uiscrollview來實現,假設要展示三列,則每一列可以放乙個uiview,做為容器。載入到資料後...