集合视图的自定义动画
Custom animation for a collection view
我正在学习如何在非常好的 CollectionViewPagingLayout 模板示例中为 collectionView 使用动画。这个:https://github.com/amirdew/CollectionViewPagingLayout
contentView 中的第一个对象一切正常。
但它不识别其他子视图。如果子视图中有一个 UILabel - 所有名称都会立即显示(尽管可以看出它们正在更改)。
Here is a 5-sec video how it looks like
我想我应该将所有子视图合并到一个视图中 - 或者修改模板以识别所有子视图。但是在没有帮助的情况下,我不明白如何实现其中任何一个。
模板作者提供了详细的使用说明文档:https://github.com/amirdew/CollectionViewPagingLayout/blob/master/Lib/TransformableView.swift
虽然它显然写得很好 - 但我未能正确阅读它。我觉得这几行可能会解决问题,但是将它们添加到代码中并没有改变任何东西:
public extension TransformableView where Self: UICollectionViewCell {
/// Default `selectableView` for `UICollectionViewCell` is the first subview of
/// `contentView` or the content view itself if there is no subview
var selectableView: UIView? {
contentView.subviews.first ?? contentView
}
}
还有这个
public extension UICollectionViewCell {
/// This method transfers the event to `selectableView`
/// this is necessary since cells are on top of each other and they fill the whole collectionView frame
/// Without this, only the first visible cell is selectable
// swiftlint:disable:next override_in_extension
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if let view = (self as? TransformableView)?.selectableView {
return view.hitTest(convert(point, to: view), with: event)
}
return super.hitTest(point, with: event)
}
}
非常感谢您对此问题的帮助。
您链接到的代码和文档状态:
/// Default `selectableView` for `UICollectionViewCell` is the first subview of
/// `contentView` or the content view itself if there is no subview
因此,将单元格的“第一个子视图”设为“容器”UIView
,并将多个子视图嵌入到该视图中:
我正在学习如何在非常好的 CollectionViewPagingLayout 模板示例中为 collectionView 使用动画。这个:https://github.com/amirdew/CollectionViewPagingLayout
contentView 中的第一个对象一切正常。
但它不识别其他子视图。如果子视图中有一个 UILabel - 所有名称都会立即显示(尽管可以看出它们正在更改)。 Here is a 5-sec video how it looks like
我想我应该将所有子视图合并到一个视图中 - 或者修改模板以识别所有子视图。但是在没有帮助的情况下,我不明白如何实现其中任何一个。
模板作者提供了详细的使用说明文档:https://github.com/amirdew/CollectionViewPagingLayout/blob/master/Lib/TransformableView.swift
虽然它显然写得很好 - 但我未能正确阅读它。我觉得这几行可能会解决问题,但是将它们添加到代码中并没有改变任何东西:
public extension TransformableView where Self: UICollectionViewCell {
/// Default `selectableView` for `UICollectionViewCell` is the first subview of
/// `contentView` or the content view itself if there is no subview
var selectableView: UIView? {
contentView.subviews.first ?? contentView
}
}
还有这个
public extension UICollectionViewCell {
/// This method transfers the event to `selectableView`
/// this is necessary since cells are on top of each other and they fill the whole collectionView frame
/// Without this, only the first visible cell is selectable
// swiftlint:disable:next override_in_extension
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if let view = (self as? TransformableView)?.selectableView {
return view.hitTest(convert(point, to: view), with: event)
}
return super.hitTest(point, with: event)
}
}
非常感谢您对此问题的帮助。
您链接到的代码和文档状态:
/// Default `selectableView` for `UICollectionViewCell` is the first subview of
/// `contentView` or the content view itself if there is no subview
因此,将单元格的“第一个子视图”设为“容器”UIView
,并将多个子视图嵌入到该视图中: