Fix voice chat mute button transitions

This commit is contained in:
Ilya Laktyushin 2020-12-25 20:16:30 +04:00
parent 5459c357d4
commit ea83772c8d

View File

@ -736,9 +736,15 @@ private final class VoiceChatActionButtonBackgroundNode: ASDisplayNode {
self.maskBlobView.startAnimating() self.maskBlobView.startAnimating()
self.maskBlobView.layer.animateScale(from: 1.0, to: 0.0, duration: 0.15, removeOnCompletion: false, completion: { [weak self] _ in self.maskBlobView.layer.animateScale(from: 1.0, to: 0.0, duration: 0.15, removeOnCompletion: false, completion: { [weak self] _ in
self?.maskBlobView.isHidden = true guard let strongSelf = self else {
self?.maskBlobView.stopAnimating() return
self?.maskBlobView.layer.removeAllAnimations() }
if strongSelf.state != .connecting && strongSelf.state != .disabled {
return
}
strongSelf.maskBlobView.isHidden = true
strongSelf.maskBlobView.stopAnimating()
strongSelf.maskBlobView.layer.removeAllAnimations()
}) })
CATransaction.begin() CATransaction.begin()
@ -750,6 +756,10 @@ private final class VoiceChatActionButtonBackgroundNode: ASDisplayNode {
growthAnimation.isRemovedOnCompletion = false growthAnimation.isRemovedOnCompletion = false
CATransaction.setCompletionBlock { CATransaction.setCompletionBlock {
self.animatingDisappearance = false
if self.state != .connecting && self.state != .disabled {
return
}
CATransaction.begin() CATransaction.begin()
CATransaction.setDisableActions(true) CATransaction.setDisableActions(true)
self.disableGlowAnimations = false self.disableGlowAnimations = false
@ -757,7 +767,6 @@ private final class VoiceChatActionButtonBackgroundNode: ASDisplayNode {
self.maskCircleLayer.isHidden = true self.maskCircleLayer.isHidden = true
self.growingForegroundCircleLayer.isHidden = true self.growingForegroundCircleLayer.isHidden = true
self.growingForegroundCircleLayer.removeAllAnimations() self.growingForegroundCircleLayer.removeAllAnimations()
self.animatingDisappearance = false
CATransaction.commit() CATransaction.commit()
} }
@ -790,11 +799,13 @@ private final class VoiceChatActionButtonBackgroundNode: ASDisplayNode {
shrinkAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeIn) shrinkAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeIn)
CATransaction.setCompletionBlock { CATransaction.setCompletionBlock {
CATransaction.begin() if case .blob = self.state {
CATransaction.setDisableActions(true) CATransaction.begin()
self.disableGlowAnimations = false CATransaction.setDisableActions(true)
self.foregroundCircleLayer.isHidden = true self.disableGlowAnimations = false
CATransaction.commit() self.foregroundCircleLayer.isHidden = true
CATransaction.commit()
}
} }
self.foregroundCircleLayer.add(shrinkAnimation, forKey: "insideShrink") self.foregroundCircleLayer.add(shrinkAnimation, forKey: "insideShrink")
@ -829,40 +840,44 @@ private final class VoiceChatActionButtonBackgroundNode: ASDisplayNode {
groupAnimation.duration = duration groupAnimation.duration = duration
CATransaction.setCompletionBlock { CATransaction.setCompletionBlock {
CATransaction.begin() if case .blob = self.state {
CATransaction.setDisableActions(true)
self.foregroundCircleLayer.isHidden = false
self.maskCircleLayer.isHidden = false
self.maskProgressLayer.isHidden = true
self.maskGradientLayer.isHidden = false
CATransaction.commit()
completion()
self.updateGlowAndGradientAnimations(active: active, previousActive: nil)
self.maskBlobView.isHidden = false
self.maskBlobView.startAnimating()
self.maskBlobView.layer.animateSpring(from: 0.1 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: 0.45)
self.updatedActive?(true)
CATransaction.begin()
let shrinkAnimation = CABasicAnimation(keyPath: "transform.scale")
shrinkAnimation.fromValue = 1.0
shrinkAnimation.toValue = 0.0
shrinkAnimation.duration = 0.15
shrinkAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeIn)
CATransaction.setCompletionBlock {
CATransaction.begin() CATransaction.begin()
CATransaction.setDisableActions(true) CATransaction.setDisableActions(true)
self.foregroundCircleLayer.isHidden = true self.foregroundCircleLayer.isHidden = false
self.maskCircleLayer.isHidden = false
self.maskProgressLayer.isHidden = true
self.maskGradientLayer.isHidden = false
CATransaction.commit()
completion()
self.updateGlowAndGradientAnimations(active: active, previousActive: nil)
self.maskBlobView.isHidden = false
self.maskBlobView.startAnimating()
self.maskBlobView.layer.animateSpring(from: 0.1 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: 0.45)
self.updatedActive?(true)
CATransaction.begin()
let shrinkAnimation = CABasicAnimation(keyPath: "transform.scale")
shrinkAnimation.fromValue = 1.0
shrinkAnimation.toValue = 0.0
shrinkAnimation.duration = 0.15
shrinkAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeIn)
CATransaction.setCompletionBlock {
if case .blob = self.state {
CATransaction.begin()
CATransaction.setDisableActions(true)
self.foregroundCircleLayer.isHidden = true
CATransaction.commit()
}
}
self.foregroundCircleLayer.add(shrinkAnimation, forKey: "insideShrink")
CATransaction.commit() CATransaction.commit()
} }
self.foregroundCircleLayer.add(shrinkAnimation, forKey: "insideShrink")
CATransaction.commit()
} }
self.maskProgressLayer.add(groupAnimation, forKey: "progressCompletion") self.maskProgressLayer.add(groupAnimation, forKey: "progressCompletion")