From 4658244e4484cd6ea346e719966edcbd3e593ec3 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 18 Feb 2019 16:00:52 +0400 Subject: [PATCH] ListView: added visible fraction value for visibility property --- Display/ListView.swift | 5 +++-- Display/ListViewItemNode.swift | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Display/ListView.swift b/Display/ListView.swift index 7dc6fa4960..06cbd5a42d 100644 --- a/Display/ListView.swift +++ b/Display/ListView.swift @@ -2973,8 +2973,9 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture var visibility: ListViewItemNodeVisibility = .none if visibilityRect.intersects(itemFrame) { let itemContentFrame = itemNode.apparentContentFrame - let full = itemContentFrame.minY >= visibilityRect.minY && itemContentFrame.maxY <= visibilityRect.maxY - visibility = .visible(full) + let intersection = itemContentFrame.intersection(visibilityRect) + let fraction = intersection.height / itemContentFrame.height + visibility = .visible(fraction) } var updateVisibility = false if !onlyPositive { diff --git a/Display/ListViewItemNode.swift b/Display/ListViewItemNode.swift index 0aca5a656a..9793f6f3a1 100644 --- a/Display/ListViewItemNode.swift +++ b/Display/ListViewItemNode.swift @@ -52,7 +52,7 @@ public struct ListViewItemNodeLayout { public enum ListViewItemNodeVisibility: Equatable { case none - case visible(Bool) + case visible(CGFloat) public static func ==(lhs: ListViewItemNodeVisibility, rhs: ListViewItemNodeVisibility) -> Bool { switch lhs { @@ -62,8 +62,8 @@ public enum ListViewItemNodeVisibility: Equatable { } else { return false } - case let .visible(full): - if case .visible(full) = rhs { + case let .visible(fraction): + if case .visible(fraction) = rhs { return true } else { return false