我想改变,动画,"外观"选择UICollectionViewCell
时(使用更多子视图使其更大)到目前为止,我尝试了很多东西,但没有一个能够奏效。
非常感谢有关此主题的任何帮助; - )
我看到两种可能性:
第一种方法:注册两种单元格并在方法中进行更改
- (void) collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
。
但是使用这个解决方案,动画不会像其他方法一样干净。
代码:
- (void) collectionView:(UICollectionView *)collectionView
didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath * previousSelectedIndexPath = self.selectedIndexPath ;
UICollectionViewCell * previousSelectedCell ;
if (previousSelectedIndexPath)
{
previousSelectedCell = [collectionView.dataSource collectionView:self.collectionView
cellForItemAtIndexPath:previousSelectedIndexPath] ;
}
UICollectionViewCell * selectedCell =
[collectionView.dataSource collectionView:self.collectionView
cellForItemAtIndexPath:indexPath] ;
[UIView animateWithDuration:1
delay:0
options:0
animations:^{
selectedCell.height = 20 ;
[self.collectionView layoutIfNeeded] ;
//[self.collectionView performBatchUpdates:^{
// // what here?
//} completion:nil] ; <- does not change anything
//[self.collectionView reloadData] ; <- does not change anything either
} completion:^(BOOL finished) {
//
}] ;
self.selectedIndexPath = indexPath ;
}`
PS:如果可能的话,我希望控制动画的持续时间。
答案 0 :(得分:0)
不确定这是最好的方法,但我通过继承UICollectionViewCell并覆盖
来做这种事情-(void)setSelected:(BOOL)selected
{
[super setSelected:selected];
// start your animation and add your subviews here
}
这样做,你必须能够在你的单元格被回收时“恢复”你选择的状态,所以你需要能够从- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
回到你选择的状态而不使用动画< / p>