ios - 动画 UICollectionView 补充 View 调整大小

标签 ios objective-c animation uicollectionview supplementary

我正在使用 https://github.com/jamztang/CSStickyHeaderFlowLayout 中的 CSStickyHeaderFlowLayout|

作为我的应用程序的一部分,我在标题 View /单元格中有一个按钮,该按钮发送到它需要增长的 Collection View 。反过来, Collection View 更改 CSStickyHeaderFlowLayout 中的标题首选大小,并将 invalidateLayout 发送到 CSStickyHeaderFlowLayout。尝试通过动画 block 制作动画效果不佳,因为它会将标题从按钮移动到顶部。这真的很奇怪。有没有办法让 flowLayout 正确地为补充 View 中的变化设置动画?

这是我更改大小的代码。

- (void)treckDetailMapCellSizeToggle:(BOOL)toggle {
    //Modifier l'attribu de la map et invalider le layout pour le redessiner.
    CSStickyHeaderFlowLayout *layout = (id)self.collectionViewLayout;
    if ([layout isKindOfClass:[CSStickyHeaderFlowLayout class]]) {
        [UIView animateWithDuration:0.5 animations: ^{
            if (isMapCellExpended) {
                isMapCellExpended = NO;
                layout.parallaxHeaderReferenceSize = CGSizeMake(self.view.frame.size.width, HEADER_VIEW_PREFERED_SIZE);
            }
            else {
                isMapCellExpended = YES;
                layout.parallaxHeaderReferenceSize = CGSizeMake(self.view.frame.size.width, HEADER_VIEW_MAX_SIZE);
            }

            [layout invalidateLayout];
        }];
    }
}

这是一段视频,讲述了当我点击名为“Ajouter a la carte”的按钮时发生的事情。

https://www.youtube.com/watch?v=aqm99HebvwE

编辑:

感谢阅读此页面(我以前从未见过)。我发现这会使它好一点但不能解决问题。 :

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    CSStickyHeaderFlowLayout *layout = (id)self.collectionViewLayout;

    if ([layout isKindOfClass:[CSStickyHeaderFlowLayout class]]) {
        [self.collectionView performBatchUpdates: ^{
            preferedSize = preferedSize == 200 ? 300 : 200;
            layout.parallaxHeaderReferenceSize = CGSizeMake(self.view.frame.size.width, preferedSize);
        } completion: ^(BOOL finished) {
        }];

    }
}

最佳答案

要为大小更改设置动画,请在 View 动画闭包中使布局无效。尺寸本身应该通过适当的布局委托(delegate)方法设置,例如collectionView(collectionView:collectionViewLayout:referenceSizeForHeaderInSection:)

UIView.animate(withDuration: 0.33) {
  self.collectionView.collectionViewLayout.invalidateLayout()
}

关于ios - 动画 UICollectionView 补充 View 调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29567045/

相关文章:

ios - UIScrollView 滚动事件阻塞 UIView 动画

wpf - 找不到 EventTrigger.SourceName

ios - NSString drawAtPoint 与

ios - 将输入到 UITextField 中的内容转换为计数器编号,例如 00 :01

objective-c - 用其他类型重新定义变量名

WPF:在不可变对象(immutable对象)实例上返回 "Cannot animate ' Color' 样式的 Storyboard。”

ios - IOS 的 FFMpeg - 禁用日志级别

ios - FileTransfer 插件,下载未在 iOS 上启动,回调无错误

c++ - 在事件的 OS X 桌面上保留一个窗口

objective-c - 每个 CPU 内核处于 C0 电源状态的时间