Swiftgram/Display/ListViewReorderingItemNode.swift
Peter Iakovlev 14f0fc94f4 no message
2018-02-21 01:46:32 +04:00

49 lines
1.5 KiB
Swift

import Foundation
import AsyncDisplayKit
final class ListViewReorderingItemNode: ASDisplayNode {
weak var itemNode: ListViewItemNode?
var currentState: (Int, Int)?
private let copyView: UIView?
private let initialLocation: CGPoint
init(itemNode: ListViewItemNode, initialLocation: CGPoint) {
self.itemNode = itemNode
self.copyView = itemNode.view.snapshotContentTree()
self.initialLocation = initialLocation
super.init()
if let copyView = self.copyView {
self.view.addSubview(copyView)
copyView.frame = CGRect(origin: CGPoint(x: initialLocation.x, y: initialLocation.y), size: copyView.bounds.size)
}
}
func updateOffset(offset: CGFloat) {
if let copyView = self.copyView {
copyView.frame = CGRect(origin: CGPoint(x: initialLocation.x, y: initialLocation.y + offset), size: copyView.bounds.size)
}
}
func currentOffset() -> CGFloat? {
if let copyView = self.copyView {
return copyView.center.y
}
return nil
}
func animateCompletion(completion: @escaping () -> Void) {
if let copyView = self.copyView, let itemNode = self.itemNode {
itemNode.isHidden = false
itemNode.transitionOffset = itemNode.apparentFrame.midY - copyView.frame.midY
itemNode.addTransitionOffsetAnimation(0.0, duration: 0.2, beginAt: CACurrentMediaTime())
completion()
} else {
completion()
}
}
}