我希望稍微有點類似的行爲,在@Mike_M的幫助下,我能夠弄明白。雖然有很多很多方法可以做到這一點,但這個特定的實現是創建一個自定義的UICollectionViewLayout。下面
代碼(GIST可以在這裏找到:https://gist.github.com/mmick66/9812223)
現在設置下列事項:*yourCollectionView*.decelerationRate = UIScrollViewDecelerationRateFast
,這可以防止通過快速輕掃被跳過的細胞。
這應該包括第1部分和第2部分。現在,對於第3部分,您可以通過不斷的無效化和更新將它合併到自定義collectionView中,但是如果你問我,這有點麻煩。因此,另一種方法是在UIScrollViewDidScroll
中設置CGAffineTransformMakeScale(,)
,您可以根據它與屏幕中心的距離動態更新單元格的大小。
您可以使用[*youCollectionView indexPathsForVisibleItems]
獲取collectionView的可見單元格的indexPaths,然後獲取這些indexPaths的單元格。對於每一個細胞,計算出的中心yourCollectionView
中的CollectionView的中心可以使用這個漂亮的方法來發現其中心的距離:CGPoint point = [self.view convertPoint:*yourCollectionView*.center toView:*yourCollectionView];
現在成立了一個規則,如果小區的中心比x更遠,單元格的大小例如是'正常大小',稱爲1.並且它越接近中心,它越接近正常大小2的兩倍。
然後你可以使用以下if/else的想法:
if (distance > x) {
cell.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
} else if (distance <= x) {
float scale = MIN(distance/x) * 2.0f;
cell.transform = CGAffineTransformMakeScale(scale, scale);
}
會發生什麼情況是,單元格的大小將完全按照您的觸摸。讓我知道你是否有更多的問題,因爲我寫的大部分內容都是從我頭頂開始的)。
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)offset
withScrollingVelocity:(CGPoint)velocity {
CGRect cvBounds = self.collectionView.bounds;
CGFloat halfWidth = cvBounds.size.width * 0.5f;
CGFloat proposedContentOffsetCenterX = offset.x + halfWidth;
NSArray* attributesArray = [self layoutAttributesForElementsInRect:cvBounds];
UICollectionViewLayoutAttributes* candidateAttributes;
for (UICollectionViewLayoutAttributes* attributes in attributesArray) {
// == Skip comparison with non-cell items (headers and footers) == //
if (attributes.representedElementCategory !=
UICollectionElementCategoryCell) {
continue;
}
// == First time in the loop == //
if(!candidateAttributes) {
candidateAttributes = attributes;
continue;
}
if (fabsf(attributes.center.x - proposedContentOffsetCenterX) <
fabsf(candidateAttributes.center.x - proposedContentOffsetCenterX)) {
candidateAttributes = attributes;
}
}
return CGPointMake(candidateAttributes.center.x - halfWidth, offset.y);
}
這裏是在Github上找到了一個例子:https://github.com/ikemai/ScaledVisibleCellsCollectionView也許它可以幫助你:) – Lapinou
@Lapinou我有我的目標c項目中使用這個麻煩。似乎不能讓橋接工作 – evenodd
嗯......通常,這很容易。看看這篇文章:http://stackoverflow.com/questions/24206732/cant-use-swift-classes-inside-objective-c讓我知道它是否適合你;) – Lapinou