我想为我的collectionview单元设置动画,这样当我触摸它时,一个mapview从它下面滑出来,并且通过向下推动它下面的单元格,基本上扩展到空间。我尝试使用这个:UICollectionView: Animate cell size change on selection,但无法让它正常工作。
这是我尝试过的。
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
[((FeedCell *)[collectionView cellForItemAtIndexPath:indexPath]) setIsSelected:YES];
[collectionView.collectionViewLayout invalidateLayout];
__weak FeedCell *cell = (FeedCell *)[self.photoCollectionView cellForItemAtIndexPath:indexPath]; // Avoid retain cycles
void (^animateChangeWidth)() = ^()
{
CGRect frame = cell.frame;
frame.size = CGSizeMake(frame.size.width, 420);
cell.frame = frame;
};
// Animate
[UIView transitionWithView:[collectionView cellForItemAtIndexPath:indexPath] duration:0.5f options: UIViewAnimationOptionCurveLinear animations:animateChangeWidth completion:nil];
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
if(((FeedCell *)[self.photoCollectionView cellForItemAtIndexPath:indexPath]).isSelected == YES){
return CGSizeMake(320, 420);
}
return CGSizeMake(320, 320);
}
我有一个自定义的CollectionView单元格,它有一个isSelected属性。我不确定我应该为单元格的xib做什么(是否将地图视图放在那里,让CGSize选择大小或取消选择大小等等)。真的很感激任何帮助!
答案 0 :(得分:0)
我正在尝试与您做同样的事情并在我的搜索中找到您的问题。看来你有一个很好的解决方案(至少在我没有经验的意见中)。什么不适合你?我几乎逐字地复制你的代码,让它做我想做的事。我改变了一些东西,但在进行更改之前没有测试代码。以下是我在didSelectItemAtIndexPath方法中对我有用的内容:
__weak MyCell *cell = (MyCell*)[collectionView cellForItemAtIndexPath:indexPath];
[cell setSelected:YES];
[collectionView.collectionViewLayout invalidateLayout];
void (^animateChangeWidth)() = ^()
{
CGRect frame = cell.frame;
frame.size = CGSizeMake(frame.size.width, 340.0f);
cell.frame = frame;
};
// Animate
[UIView transitionWithView:cell duration:0.5f options: UIViewAnimationOptionCurveEaseInOut animations:animateChangeWidth completion:nil];
我也覆盖了collectionView:layout:sizeForItemAtIndexPath所以我认为这对你也有用。
抱歉,我不能更具体。如果你说它不起作用会有所帮助。