Swiftgram/submodules/Display/Source/ListViewAccessoryItemNode.swift
2019-11-14 23:27:44 +04:00

51 lines
1.6 KiB
Swift

import Foundation
import UIKit
import AsyncDisplayKit
open class ListViewAccessoryItemNode: ASDisplayNode {
var transitionOffset: CGPoint = CGPoint() {
didSet {
self.bounds = CGRect(origin: self.transitionOffset, size: self.bounds.size)
}
}
private var transitionOffsetAnimation: ListViewAnimation?
final func animateTransitionOffset(_ from: CGPoint, beginAt: Double, duration: Double, curve: @escaping (CGFloat) -> CGFloat) {
self.transitionOffset = from
self.transitionOffsetAnimation = ListViewAnimation(from: from, to: CGPoint(), duration: duration, curve: curve, beginAt: beginAt, update: { [weak self] _, currentValue in
if let strongSelf = self {
strongSelf.transitionOffset = currentValue
}
})
}
final func removeAllAnimations() {
self.transitionOffsetAnimation = nil
self.transitionOffset = CGPoint()
}
final func animate(_ timestamp: Double) -> Bool {
if let animation = self.transitionOffsetAnimation {
animation.applyAt(timestamp)
if animation.completeAt(timestamp) {
self.transitionOffsetAnimation = nil
} else {
return true
}
}
return false
}
override open func layout() {
super.layout()
self.updateLayout(size: self.bounds.size, leftInset: 0.0, rightInset: 0.0)
}
open func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat) {
}
}