mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Avatar animation fixes
This commit is contained in:
@@ -2607,6 +2607,8 @@ final class PeerInfoHeaderNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let isLandscape = containerInset > 16.0
|
||||||
|
|
||||||
let themeUpdated = self.presentationData?.theme !== presentationData.theme
|
let themeUpdated = self.presentationData?.theme !== presentationData.theme
|
||||||
self.presentationData = presentationData
|
self.presentationData = presentationData
|
||||||
|
|
||||||
@@ -2764,7 +2766,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
|
|||||||
let avatarFrame = CGRect(origin: CGPoint(x: floor((width - avatarSize) / 2.0), y: statusBarHeight + 22.0), size: CGSize(width: avatarSize, height: avatarSize))
|
let avatarFrame = CGRect(origin: CGPoint(x: floor((width - avatarSize) / 2.0), y: statusBarHeight + 22.0), size: CGSize(width: avatarSize, height: avatarSize))
|
||||||
|
|
||||||
self.backgroundNode.updateColor(color: presentationData.theme.rootController.navigationBar.blurredBackgroundColor, transition: .immediate)
|
self.backgroundNode.updateColor(color: presentationData.theme.rootController.navigationBar.blurredBackgroundColor, transition: .immediate)
|
||||||
|
|
||||||
let headerBackgroundColor: UIColor = presentationData.theme.list.blocksBackgroundColor
|
let headerBackgroundColor: UIColor = presentationData.theme.list.blocksBackgroundColor
|
||||||
var effectiveSeparatorAlpha: CGFloat
|
var effectiveSeparatorAlpha: CGFloat
|
||||||
if let navigationTransition = self.navigationTransition {
|
if let navigationTransition = self.navigationTransition {
|
||||||
@@ -2778,7 +2780,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
|
|||||||
transitionSourceAvatarFrame = avatarNavigationNode.avatarNode.view.convert(avatarNavigationNode.avatarNode.view.bounds, to: navigationTransition.sourceNavigationBar.view)
|
transitionSourceAvatarFrame = avatarNavigationNode.avatarNode.view.convert(avatarNavigationNode.avatarNode.view.bounds, to: navigationTransition.sourceNavigationBar.view)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if deviceMetrics.hasDynamicIsland {
|
if deviceMetrics.hasDynamicIsland && !isLandscape {
|
||||||
transitionSourceAvatarFrame = CGRect(origin: CGPoint(x: avatarFrame.minX, y: -20.0), size: avatarFrame.size).insetBy(dx: avatarSize * 0.4, dy: avatarSize * 0.4)
|
transitionSourceAvatarFrame = CGRect(origin: CGPoint(x: avatarFrame.minX, y: -20.0), size: avatarFrame.size).insetBy(dx: avatarSize * 0.4, dy: avatarSize * 0.4)
|
||||||
} else {
|
} else {
|
||||||
transitionSourceAvatarFrame = avatarFrame.offsetBy(dx: 0.0, dy: -avatarFrame.maxY).insetBy(dx: avatarSize * 0.4, dy: avatarSize * 0.4)
|
transitionSourceAvatarFrame = avatarFrame.offsetBy(dx: 0.0, dy: -avatarFrame.maxY).insetBy(dx: avatarSize * 0.4, dy: avatarSize * 0.4)
|
||||||
@@ -3304,7 +3306,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
|
|||||||
controlsClippingFrame = apparentAvatarFrame
|
controlsClippingFrame = apparentAvatarFrame
|
||||||
}
|
}
|
||||||
|
|
||||||
let avatarClipOffset: CGFloat = !self.isAvatarExpanded && deviceMetrics.hasDynamicIsland && self.avatarClippingNode.clipsToBounds ? 48.0 : 0.0
|
let avatarClipOffset: CGFloat = !self.isAvatarExpanded && deviceMetrics.hasDynamicIsland && self.avatarClippingNode.clipsToBounds && !isLandscape ? 48.0 : 0.0
|
||||||
let clippingNodeTransition = ContainedViewLayoutTransition.immediate
|
let clippingNodeTransition = ContainedViewLayoutTransition.immediate
|
||||||
clippingNodeTransition.updateFrame(layer: self.avatarClippingNode.layer, frame: CGRect(origin: CGPoint(x: 0.0, y: avatarClipOffset), size: CGSize(width: width, height: 1000.0)))
|
clippingNodeTransition.updateFrame(layer: self.avatarClippingNode.layer, frame: CGRect(origin: CGPoint(x: 0.0, y: avatarClipOffset), size: CGSize(width: width, height: 1000.0)))
|
||||||
clippingNodeTransition.updateSublayerTransformOffset(layer: self.avatarClippingNode.layer, offset: CGPoint(x: 0.0, y: -avatarClipOffset))
|
clippingNodeTransition.updateSublayerTransformOffset(layer: self.avatarClippingNode.layer, offset: CGPoint(x: 0.0, y: -avatarClipOffset))
|
||||||
@@ -3351,7 +3353,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
|
|||||||
transition.updateSublayerTransformScale(node: self.avatarListNode.listContainerTransformNode, scale: avatarListContainerScale)
|
transition.updateSublayerTransformScale(node: self.avatarListNode.listContainerTransformNode, scale: avatarListContainerScale)
|
||||||
}
|
}
|
||||||
|
|
||||||
if deviceMetrics.hasDynamicIsland && self.forumTopicThreadId == nil && self.navigationTransition == nil {
|
if deviceMetrics.hasDynamicIsland && self.forumTopicThreadId == nil && self.navigationTransition == nil && !isLandscape {
|
||||||
let maskValue = max(0.0, min(1.0, contentOffset / 120.0))
|
let maskValue = max(0.0, min(1.0, contentOffset / 120.0))
|
||||||
self.avatarListNode.containerNode.view.mask = self.avatarListNode.maskNode.view
|
self.avatarListNode.containerNode.view.mask = self.avatarListNode.maskNode.view
|
||||||
if maskValue > 0.03 {
|
if maskValue > 0.03 {
|
||||||
@@ -3368,7 +3370,12 @@ final class PeerInfoHeaderNode: ASDisplayNode {
|
|||||||
|
|
||||||
self.avatarListNode.listContainerNode.topShadowNode.isHidden = !self.isAvatarExpanded
|
self.avatarListNode.listContainerNode.topShadowNode.isHidden = !self.isAvatarExpanded
|
||||||
|
|
||||||
self.avatarListNode.maskNode.position = CGPoint(x: 0.0, y: -self.avatarListNode.frame.minY + 48.0 + 85.5)
|
var avatarMaskOffset: CGFloat = 0.0
|
||||||
|
if contentOffset < 0.0 {
|
||||||
|
avatarMaskOffset -= contentOffset
|
||||||
|
}
|
||||||
|
|
||||||
|
self.avatarListNode.maskNode.position = CGPoint(x: 0.0, y: -self.avatarListNode.frame.minY + 48.0 + 85.5 + avatarMaskOffset)
|
||||||
self.avatarListNode.maskNode.bounds = CGRect(origin: .zero, size: CGSize(width: 171.0, height: 171.0))
|
self.avatarListNode.maskNode.bounds = CGRect(origin: .zero, size: CGSize(width: 171.0, height: 171.0))
|
||||||
|
|
||||||
self.avatarListNode.bottomCoverNode.position = self.avatarListNode.maskNode.position
|
self.avatarListNode.bottomCoverNode.position = self.avatarListNode.maskNode.position
|
||||||
|
|||||||
Reference in New Issue
Block a user