mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Animation improvements
This commit is contained in:
parent
0b6a974d47
commit
d9ac01d601
@ -626,7 +626,7 @@ public extension ContainedViewLayoutTransition {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateFrame(layer: CALayer, frame: CGRect, completion: ((Bool) -> Void)? = nil) {
|
func updateFrame(layer: CALayer, frame: CGRect, beginWithCurrentState: Bool = false, completion: ((Bool) -> Void)? = nil) {
|
||||||
if layer.frame.equalTo(frame) {
|
if layer.frame.equalTo(frame) {
|
||||||
completion?(true)
|
completion?(true)
|
||||||
} else {
|
} else {
|
||||||
@ -637,7 +637,12 @@ public extension ContainedViewLayoutTransition {
|
|||||||
completion(true)
|
completion(true)
|
||||||
}
|
}
|
||||||
case let .animated(duration, curve):
|
case let .animated(duration, curve):
|
||||||
let previousFrame = layer.frame
|
let previousFrame: CGRect
|
||||||
|
if beginWithCurrentState, let presentation = layer.presentation() {
|
||||||
|
previousFrame = presentation.frame
|
||||||
|
} else {
|
||||||
|
previousFrame = layer.frame
|
||||||
|
}
|
||||||
layer.frame = frame
|
layer.frame = frame
|
||||||
layer.animateFrame(from: previousFrame, to: frame, duration: duration, timingFunction: curve.timingFunction, mediaTimingFunction: curve.mediaTimingFunction, completion: { result in
|
layer.animateFrame(from: previousFrame, to: frame, duration: duration, timingFunction: curve.timingFunction, mediaTimingFunction: curve.mediaTimingFunction, completion: { result in
|
||||||
if let completion = completion {
|
if let completion = completion {
|
||||||
|
@ -235,12 +235,12 @@ public final class NavigationBackgroundNode: ASDisplayNode {
|
|||||||
self.validLayout = (size, cornerRadius)
|
self.validLayout = (size, cornerRadius)
|
||||||
|
|
||||||
let contentFrame = CGRect(origin: CGPoint(), size: size)
|
let contentFrame = CGRect(origin: CGPoint(), size: size)
|
||||||
transition.updateFrame(node: self.backgroundNode, frame: contentFrame)
|
transition.updateFrame(node: self.backgroundNode, frame: contentFrame, beginWithCurrentState: true)
|
||||||
if let effectView = self.effectView, effectView.frame != contentFrame {
|
if let effectView = self.effectView, effectView.frame != contentFrame {
|
||||||
transition.updateFrame(layer: effectView.layer, frame: contentFrame)
|
transition.updateFrame(layer: effectView.layer, frame: contentFrame, beginWithCurrentState: true)
|
||||||
if let sublayers = effectView.layer.sublayers {
|
if let sublayers = effectView.layer.sublayers {
|
||||||
for sublayer in sublayers {
|
for sublayer in sublayers {
|
||||||
transition.updateFrame(layer: sublayer, frame: contentFrame)
|
transition.updateFrame(layer: sublayer, frame: contentFrame, beginWithCurrentState: true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -150,15 +150,15 @@ final class ReactionContextBackgroundNode: ASDisplayNode {
|
|||||||
|
|
||||||
let contentBounds = backgroundFrame.insetBy(dx: -10.0, dy: -10.0).union(largeCircleFrame).union(smallCircleFrame)
|
let contentBounds = backgroundFrame.insetBy(dx: -10.0, dy: -10.0).union(largeCircleFrame).union(smallCircleFrame)
|
||||||
|
|
||||||
transition.updateFrame(layer: self.backgroundLayer, frame: backgroundFrame.offsetBy(dx: -contentBounds.minX, dy: -contentBounds.minY))
|
transition.updateFrame(layer: self.backgroundLayer, frame: backgroundFrame.offsetBy(dx: -contentBounds.minX, dy: -contentBounds.minY), beginWithCurrentState: true)
|
||||||
transition.updateFrame(layer: self.largeCircleLayer, frame: largeCircleFrame.offsetBy(dx: -contentBounds.minX, dy: -contentBounds.minY))
|
transition.updateFrame(layer: self.largeCircleLayer, frame: largeCircleFrame.offsetBy(dx: -contentBounds.minX, dy: -contentBounds.minY), beginWithCurrentState: true)
|
||||||
transition.updateFrame(layer: self.smallCircleLayer, frame: smallCircleFrame.offsetBy(dx: -contentBounds.minX, dy: -contentBounds.minY))
|
transition.updateFrame(layer: self.smallCircleLayer, frame: smallCircleFrame.offsetBy(dx: -contentBounds.minX, dy: -contentBounds.minY), beginWithCurrentState: true)
|
||||||
|
|
||||||
transition.updateFrame(layer: self.backgroundShadowLayer, frame: backgroundFrame.insetBy(dx: -shadowInset, dy: -shadowInset))
|
transition.updateFrame(layer: self.backgroundShadowLayer, frame: backgroundFrame.insetBy(dx: -shadowInset, dy: -shadowInset), beginWithCurrentState: true)
|
||||||
transition.updateFrame(layer: self.largeCircleShadowLayer, frame: largeCircleFrame.insetBy(dx: -shadowInset, dy: -shadowInset))
|
transition.updateFrame(layer: self.largeCircleShadowLayer, frame: largeCircleFrame.insetBy(dx: -shadowInset, dy: -shadowInset), beginWithCurrentState: true)
|
||||||
transition.updateFrame(layer: self.smallCircleShadowLayer, frame: smallCircleFrame.insetBy(dx: -shadowInset, dy: -shadowInset))
|
transition.updateFrame(layer: self.smallCircleShadowLayer, frame: smallCircleFrame.insetBy(dx: -shadowInset, dy: -shadowInset), beginWithCurrentState: true)
|
||||||
|
|
||||||
transition.updateFrame(node: self.backgroundNode, frame: contentBounds)
|
transition.updateFrame(node: self.backgroundNode, frame: contentBounds, beginWithCurrentState: true)
|
||||||
self.backgroundNode.update(size: contentBounds.size, transition: transition)
|
self.backgroundNode.update(size: contentBounds.size, transition: transition)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,13 +169,11 @@ final class ReactionContextBackgroundNode: ASDisplayNode {
|
|||||||
let mainCircleDuration: Double = 0.25
|
let mainCircleDuration: Double = 0.25
|
||||||
let mainCircleDelay: Double = 0.16
|
let mainCircleDelay: Double = 0.16
|
||||||
|
|
||||||
//self.smallCircleLayer.animate(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", timingFunction: CAMediaTimingFunctionName.easeOut.rawValue, duration: smallCircleDuration)
|
|
||||||
self.smallCircleLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: smallCircleDuration, delay: 0.0)
|
self.smallCircleLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: smallCircleDuration, delay: 0.0)
|
||||||
|
|
||||||
self.largeCircleLayer.animateAlpha(from: 0.0, to: 1.0, duration: 0.01, delay: largeCircleDelay)
|
self.largeCircleLayer.animateAlpha(from: 0.0, to: 1.0, duration: 0.01, delay: largeCircleDelay)
|
||||||
self.largeCircleLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: largeCircleDuration, delay: largeCircleDelay)
|
self.largeCircleLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: largeCircleDuration, delay: largeCircleDelay)
|
||||||
self.largeCircleShadowLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: largeCircleDuration, delay: largeCircleDelay)
|
self.largeCircleShadowLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: largeCircleDuration, delay: largeCircleDelay)
|
||||||
//self.largeCircleLayer.animate(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", timingFunction: CAMediaTimingFunctionName.easeOut.rawValue, duration: largeCircleDuration)
|
|
||||||
|
|
||||||
self.backgroundLayer.animateAlpha(from: 0.0, to: 1.0, duration: 0.01, delay: mainCircleDelay)
|
self.backgroundLayer.animateAlpha(from: 0.0, to: 1.0, duration: 0.01, delay: mainCircleDelay)
|
||||||
self.backgroundLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: mainCircleDuration, delay: mainCircleDelay)
|
self.backgroundLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: mainCircleDuration, delay: mainCircleDelay)
|
||||||
|
@ -316,7 +316,7 @@ public final class ReactionContextNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
|
|
||||||
self.updateScrolling(transition: transition)
|
self.updateScrolling(transition: transition)
|
||||||
|
|
||||||
transition.updateFrame(node: self.backgroundNode, frame: backgroundFrame)
|
transition.updateFrame(node: self.backgroundNode, frame: backgroundFrame, beginWithCurrentState: true)
|
||||||
self.backgroundNode.update(
|
self.backgroundNode.update(
|
||||||
theme: self.theme,
|
theme: self.theme,
|
||||||
size: backgroundFrame.size,
|
size: backgroundFrame.size,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user