Profile improvements

This commit is contained in:
Isaac 2023-12-05 01:46:49 +04:00
parent 9a57af8ebb
commit 492a91377a
3 changed files with 44 additions and 12 deletions

View File

@ -599,6 +599,9 @@ private final class VariableBlurView: UIVisualEffectView {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
override func updateTraitsIfNeeded() {
}
private func resetEffect() { private func resetEffect() {
let filterClassStringEncoded = "Q0FGaWx0ZXI=" let filterClassStringEncoded = "Q0FGaWx0ZXI="
let filterClassString: String = { let filterClassString: String = {
@ -669,6 +672,7 @@ public final class PeerAvatarBottomShadowNode: ASDisplayNode {
self.imageView = UIImageView() self.imageView = UIImageView()
self.imageView.contentMode = .scaleToFill self.imageView.contentMode = .scaleToFill
self.imageView.alpha = 0.8
super.init() super.init()
@ -702,6 +706,7 @@ public final class PeerAvatarBottomShadowNode: ASDisplayNode {
self.backgroundNode.updateColor(color: UIColor(white: 0.0, alpha: 0.1), enableSaturation: false, forceKeepBlur: true, transition: .immediate) self.backgroundNode.updateColor(color: UIColor(white: 0.0, alpha: 0.1), enableSaturation: false, forceKeepBlur: true, transition: .immediate)
self.view.addSubview(self.imageView)
//self.addSubnode(self.backgroundNode) //self.addSubnode(self.backgroundNode)
} }
@ -1688,7 +1693,7 @@ public final class PeerInfoAvatarListContainerNode: ASDisplayNode {
transition.updateAlpha(node: self.setByYouNode, alpha: 0.7) transition.updateAlpha(node: self.setByYouNode, alpha: 0.7)
self.setByYouNode.attributedText = NSAttributedString(string: photoTitle, font: Font.regular(12.0), textColor: UIColor.white) self.setByYouNode.attributedText = NSAttributedString(string: photoTitle, font: Font.regular(12.0), textColor: UIColor.white)
let setByYouSize = self.setByYouNode.updateLayout(size) let setByYouSize = self.setByYouNode.updateLayout(size)
self.setByYouNode.frame = CGRect(origin: CGPoint(x: size.width - setByYouSize.width - 14.0, y: size.height - setByYouSize.height - 18.0), size: setByYouSize) self.setByYouNode.frame = CGRect(origin: CGPoint(x: size.width - setByYouSize.width - 14.0, y: size.height - setByYouSize.height - 40.0), size: setByYouSize)
self.setByYouNode.isUserInteractionEnabled = hasLink self.setByYouNode.isUserInteractionEnabled = hasLink
} else { } else {
transition.updateAlpha(node: self.setByYouNode, alpha: 0.0) transition.updateAlpha(node: self.setByYouNode, alpha: 0.0)

View File

@ -42,7 +42,7 @@ final class PeerInfoHeaderButtonNode: HighlightableButtonNode {
private let action: (PeerInfoHeaderButtonNode, ContextGesture?) -> Void private let action: (PeerInfoHeaderButtonNode, ContextGesture?) -> Void
let referenceNode: ContextReferenceContentNode let referenceNode: ContextReferenceContentNode
let containerNode: ContextControllerSourceNode let containerNode: ContextControllerSourceNode
private let backgroundNode: NavigationBackgroundNode //private let backgroundNode: NavigationBackgroundNode
private let contentNode: ASDisplayNode private let contentNode: ASDisplayNode
private let iconNode: ASImageNode private let iconNode: ASImageNode
private let textNode: ImmediateTextNode private let textNode: ImmediateTextNode
@ -52,6 +52,9 @@ final class PeerInfoHeaderButtonNode: HighlightableButtonNode {
private var icon: PeerInfoHeaderButtonIcon? private var icon: PeerInfoHeaderButtonIcon?
private var isActive: Bool? private var isActive: Bool?
let backgroundContainerView: UIView
let backgroundView: UIView
init(key: PeerInfoHeaderButtonKey, action: @escaping (PeerInfoHeaderButtonNode, ContextGesture?) -> Void) { init(key: PeerInfoHeaderButtonKey, action: @escaping (PeerInfoHeaderButtonNode, ContextGesture?) -> Void) {
self.key = key self.key = key
self.action = action self.action = action
@ -60,8 +63,13 @@ final class PeerInfoHeaderButtonNode: HighlightableButtonNode {
self.containerNode = ContextControllerSourceNode() self.containerNode = ContextControllerSourceNode()
self.containerNode.animateScale = false self.containerNode.animateScale = false
self.backgroundNode = NavigationBackgroundNode(color: UIColor(white: 1.0, alpha: 0.2), enableBlur: true, enableSaturation: false) self.backgroundContainerView = UIView()
self.backgroundNode.isUserInteractionEnabled = false self.backgroundView = UIView()
self.backgroundView.backgroundColor = .white
self.backgroundContainerView.addSubview(self.backgroundView)
/*self.backgroundNode = NavigationBackgroundNode(color: UIColor(white: 1.0, alpha: 0.2), enableBlur: true, enableSaturation: false)
self.backgroundNode.isUserInteractionEnabled = false*/
self.contentNode = ASDisplayNode() self.contentNode = ASDisplayNode()
self.contentNode.isUserInteractionEnabled = false self.contentNode.isUserInteractionEnabled = false
@ -80,7 +88,7 @@ final class PeerInfoHeaderButtonNode: HighlightableButtonNode {
self.accessibilityTraits = .button self.accessibilityTraits = .button
self.containerNode.addSubnode(self.referenceNode) self.containerNode.addSubnode(self.referenceNode)
self.referenceNode.addSubnode(self.backgroundNode) //self.referenceNode.addSubnode(self.backgroundNode)
self.referenceNode.addSubnode(self.contentNode) self.referenceNode.addSubnode(self.contentNode)
self.contentNode.addSubnode(self.iconNode) self.contentNode.addSubnode(self.iconNode)
self.addSubnode(self.containerNode) self.addSubnode(self.containerNode)
@ -259,12 +267,14 @@ final class PeerInfoHeaderButtonNode: HighlightableButtonNode {
let backgroundY: CGFloat = size.height * (1.0 - fraction) let backgroundY: CGFloat = size.height * (1.0 - fraction)
let backgroundFrame = CGRect(origin: CGPoint(x: 0.0, y: backgroundY), size: CGSize(width: size.width, height: max(0.0, size.height - backgroundY))) let backgroundFrame = CGRect(origin: CGPoint(x: 0.0, y: backgroundY), size: CGSize(width: size.width, height: max(0.0, size.height - backgroundY)))
transition.updateFrame(node: self.backgroundNode, frame: backgroundFrame) //transition.updateFrame(node: self.backgroundNode, frame: backgroundFrame)
transition.updateFrame(view: self.backgroundView, frame: backgroundFrame)
transition.updateSublayerTransformScale(node: self.contentNode, scale: 1.0 * fraction + 0.001 * (1.0 - fraction)) transition.updateSublayerTransformScale(node: self.contentNode, scale: 1.0 * fraction + 0.001 * (1.0 - fraction))
self.backgroundNode.update(size: backgroundFrame.size, cornerRadius: min(11.0, backgroundFrame.height * 0.5), transition: transition) transition.updateCornerRadius(layer: self.backgroundView.layer, cornerRadius: min(11.0, backgroundFrame.height * 0.5))
self.backgroundNode.updateColor(color: backgroundColor, transition: transition) //self.backgroundNode.update(size: backgroundFrame.size, cornerRadius: min(11.0, backgroundFrame.height * 0.5), transition: transition)
//self.backgroundNode.updateColor(color: backgroundColor, transition: transition)
transition.updateFrame(node: self.iconNode, frame: CGRect(origin: CGPoint(x: floor((size.width - iconSize.width) / 2.0), y: 1.0), size: iconSize)) transition.updateFrame(node: self.iconNode, frame: CGRect(origin: CGPoint(x: floor((size.width - iconSize.width) / 2.0), y: 1.0), size: iconSize))
if let animatedIconView = self.animatedIcon?.view { if let animatedIconView = self.animatedIcon?.view {
transition.updateFrame(view: animatedIconView, frame: CGRect(origin: CGPoint(x: floor((size.width - iconSize.width) / 2.0), y: 1.0), size: iconSize)) transition.updateFrame(view: animatedIconView, frame: CGRect(origin: CGPoint(x: floor((size.width - iconSize.width) / 2.0), y: 1.0), size: iconSize))

View File

@ -99,6 +99,8 @@ final class PeerInfoHeaderNode: ASDisplayNode {
let backgroundBannerView: UIView let backgroundBannerView: UIView
let backgroundCover = ComponentView<Empty>() let backgroundCover = ComponentView<Empty>()
let buttonsContainerNode: SparseNode let buttonsContainerNode: SparseNode
let buttonsBackgroundNode: NavigationBackgroundNode
let buttonsMaskView: UIView
let regularContentNode: PeerInfoHeaderRegularContentNode let regularContentNode: PeerInfoHeaderRegularContentNode
let editingContentNode: PeerInfoHeaderEditingContentNode let editingContentNode: PeerInfoHeaderEditingContentNode
let avatarOverlayNode: PeerInfoEditingAvatarOverlayNode let avatarOverlayNode: PeerInfoEditingAvatarOverlayNode
@ -206,6 +208,11 @@ final class PeerInfoHeaderNode: ASDisplayNode {
self.buttonsContainerNode = SparseNode() self.buttonsContainerNode = SparseNode()
self.buttonsContainerNode.clipsToBounds = true self.buttonsContainerNode.clipsToBounds = true
self.buttonsBackgroundNode = NavigationBackgroundNode(color: .clear, enableBlur: true, enableSaturation: false)
self.buttonsContainerNode.addSubnode(self.buttonsBackgroundNode)
self.buttonsMaskView = UIView()
self.buttonsBackgroundNode.view.mask = self.buttonsMaskView
self.regularContentNode = PeerInfoHeaderRegularContentNode() self.regularContentNode = PeerInfoHeaderRegularContentNode()
var requestUpdateLayoutImpl: (() -> Void)? var requestUpdateLayoutImpl: (() -> Void)?
self.editingContentNode = PeerInfoHeaderEditingContentNode(context: context, requestUpdateLayout: { self.editingContentNode = PeerInfoHeaderEditingContentNode(context: context, requestUpdateLayout: {
@ -820,8 +827,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
if self.isSettings { if self.isSettings {
expandedAvatarListHeight = expandedAvatarListHeight + 60.0 expandedAvatarListHeight = expandedAvatarListHeight + 60.0
} else { } else {
let avatarEnlargementFactor: CGFloat = 1.35 expandedAvatarListHeight = expandedAvatarListHeight + 98.0
expandedAvatarListHeight = floor(expandedAvatarListHeight * avatarEnlargementFactor)
} }
let expandedAvatarListSize = CGSize(width: width, height: expandedAvatarListHeight) let expandedAvatarListSize = CGSize(width: width, height: expandedAvatarListHeight)
@ -847,7 +853,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
isFake = peer.isFake || peer.isScam isFake = peer.isFake || peer.isScam
} }
let titleShadowColor = UIColor(white: 0.0, alpha: 0.1) let titleShadowColor: UIColor? = nil
if let peer = peer { if let peer = peer {
var title: String var title: String
@ -1108,7 +1114,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
var bottomShadowHeight: CGFloat = 88.0 var bottomShadowHeight: CGFloat = 88.0
if !self.isSettings { if !self.isSettings {
bottomShadowHeight += 110.0 bottomShadowHeight += 100.0
} }
let bottomShadowFrame = CGRect(origin: CGPoint(x: 0.0, y: expandedAvatarHeight - bottomShadowHeight), size: CGSize(width: width, height: bottomShadowHeight)) let bottomShadowFrame = CGRect(origin: CGPoint(x: 0.0, y: expandedAvatarHeight - bottomShadowHeight), size: CGSize(width: width, height: bottomShadowHeight))
transition.updateFrame(node: self.avatarListNode.listContainerNode.bottomShadowNode, frame: bottomShadowFrame, beginWithCurrentState: true) transition.updateFrame(node: self.avatarListNode.listContainerNode.bottomShadowNode, frame: bottomShadowFrame, beginWithCurrentState: true)
@ -1636,6 +1642,10 @@ final class PeerInfoHeaderNode: ASDisplayNode {
buttonRightOrigin.y += actionButtonSize.height + 24.0 buttonRightOrigin.y += actionButtonSize.height + 24.0
} }
transition.updateFrameAdditive(node: self.buttonsBackgroundNode, frame: CGRect(origin: CGPoint(x: 0.0, y: buttonRightOrigin.y), size: CGSize(width: width, height: buttonSize.height)))
self.buttonsBackgroundNode.update(size: self.buttonsBackgroundNode.bounds.size, transition: transition)
self.buttonsBackgroundNode.updateColor(color: contentButtonBackgroundColor, enableBlur: true, transition: transition)
for buttonKey in buttonKeys.reversed() { for buttonKey in buttonKeys.reversed() {
let buttonNode: PeerInfoHeaderButtonNode let buttonNode: PeerInfoHeaderButtonNode
var wasAdded = false var wasAdded = false
@ -1648,6 +1658,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
}) })
self.buttonNodes[buttonKey] = buttonNode self.buttonNodes[buttonKey] = buttonNode
self.buttonsContainerNode.addSubnode(buttonNode) self.buttonsContainerNode.addSubnode(buttonNode)
self.buttonsMaskView.addSubview(buttonNode.backgroundContainerView)
} }
let buttonFrame = CGRect(origin: CGPoint(x: buttonRightOrigin.x - buttonSize.width, y: buttonRightOrigin.y), size: buttonSize) let buttonFrame = CGRect(origin: CGPoint(x: buttonRightOrigin.x - buttonSize.width, y: buttonRightOrigin.y), size: buttonSize)
@ -1658,6 +1669,8 @@ final class PeerInfoHeaderNode: ASDisplayNode {
} else { } else {
buttonTransition.updateFrame(node: buttonNode, frame: buttonFrame) buttonTransition.updateFrame(node: buttonNode, frame: buttonFrame)
} }
buttonTransition.updateFrame(view: buttonNode.backgroundContainerView, frame: buttonFrame.offsetBy(dx: 0.0, dy: -buttonFrame.minY))
let buttonText: String let buttonText: String
let buttonIcon: PeerInfoHeaderButtonIcon let buttonIcon: PeerInfoHeaderButtonIcon
switch buttonKey { switch buttonKey {
@ -1717,8 +1730,10 @@ final class PeerInfoHeaderNode: ASDisplayNode {
if wasAdded { if wasAdded {
buttonNode.alpha = 0.0 buttonNode.alpha = 0.0
buttonNode.backgroundContainerView.alpha = 0.0
} }
transition.updateAlpha(node: buttonNode, alpha: buttonsTransitionFraction) transition.updateAlpha(node: buttonNode, alpha: buttonsTransitionFraction)
transition.updateAlpha(layer: buttonNode.backgroundContainerView.layer, alpha: buttonsTransitionFraction)
if case .mute = buttonKey, buttonNode.containerNode.alpha.isZero, additive { if case .mute = buttonKey, buttonNode.containerNode.alpha.isZero, additive {
if case let .animated(duration, curve) = transition { if case let .animated(duration, curve) = transition {
@ -1736,7 +1751,9 @@ final class PeerInfoHeaderNode: ASDisplayNode {
if !buttonKeys.contains(key) { if !buttonKeys.contains(key) {
if let buttonNode = self.buttonNodes[key] { if let buttonNode = self.buttonNodes[key] {
self.buttonNodes.removeValue(forKey: key) self.buttonNodes.removeValue(forKey: key)
transition.updateAlpha(layer: buttonNode.backgroundContainerView.layer, alpha: 0.0)
transition.updateAlpha(node: buttonNode, alpha: 0.0) { [weak buttonNode] _ in transition.updateAlpha(node: buttonNode, alpha: 0.0) { [weak buttonNode] _ in
buttonNode?.backgroundContainerView.removeFromSuperview()
buttonNode?.removeFromSupernode() buttonNode?.removeFromSupernode()
} }
} }