如何使用 UICollectionView 在 Pages 中重新创建重命名动画?

Posted

技术标签:

【中文标题】如何使用 UICollectionView 在 Pages 中重新创建重命名动画?【英文标题】:How do I recreate the rename animation in Pages with a UICollectionView? 【发布时间】:2012-10-06 16:29:55 【问题描述】:

In Pages 文档以纸张大小的矩形列出,下方带有标题和日期。我用 UICollectionView 重新创建了这个外观。

当用户点击标题以重命名文档时,所有其他文档都会淡出,而您点击的文档会从当前位置过渡到中心,并随着键盘滑出而扩大一点尺寸。

(我发现 this video 显示了我在说什么)

使用 UICollectionView 时最好的方法是什么?

【问题讨论】:

【参考方案1】:

你必须继承UICollectionViewFlowLayout。然后在执行所需的操作(重命名)时,将需要编辑的单元格的indexPath 传递给布局。

然后你可以添加需要的布局属性,像这样:

-(void)applyRenameAttributes:(UICollectionViewLayoutAttributes *)attributes

    if (self.renameIndexPath != nil) 
        if (attributes.indexPath == self.renameIndexPath) 
            // add attributes for the item that needs to be renamed
         else 
            attributes.hidden = YES;
        
    

-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect

    NSArray *allAttributes = [super layoutAttributesForElementsInRect:rect];

    for (UICollectionViewLayoutAttributes *attributes in allAttributes) 
        [self applyRenameAttributes:attributes];
    

    return allAttributes;

-(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath

    UICollectionViewLayoutAttributes *attributes = [super layoutAttributesForItemAtIndexPath:indexPath];

    [self applyRenameAttributes:attributes];

    return attributes;

您还需要在 renameIndexPath 值更改时使布局无效(在 setter 中执行此操作)。重命名完成(或取消)后,将renameIndexPath 改回nil

【讨论】:

我没有机会尝试这个,但好主意。我最终在单元格中放置了一个 UITextField 并进行了内联重命名。如果用户滚动集合视图,我只需关闭键盘。最终使用新的非页面设计效果更好。

以上是关于如何使用 UICollectionView 在 Pages 中重新创建重命名动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 中使用 @resultbuilder 使用 UICollectionView?

如何使用 UIViewControllerRepresentable 在 SwiftUI 中呈现 UICollectionView

如何使用 Alamofire 在 UICollectionView 单元格中使用标签显示图像?

在 UICollectionView 中使用 reloadData 时如何从重新加载中排除标头

如何在 UICollectionView 中实现页面之间的间距?

如何使用 UICollectionView 在 Pages 中重新创建重命名动画?