From 1d7cf6340934f9444a974267b7b967a5ed8ab14e Mon Sep 17 00:00:00 2001 From: Robin Kutesa Date: Thu, 21 May 2026 00:07:01 +0300 Subject: [PATCH] =?UTF-8?q?Anchor=20circle=20=E2=80=94=20pull=20zone=20flo?= =?UTF-8?q?ats=20above=20ring=20via=20overlay,=20no=20layout=20shift?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pull zone is now an .overlay(alignment: .top) offset upward by its own height, so it appears above the ring without pushing it down. Removed the ring's offset(y:) so it stays perfectly fixed while pulling. Co-Authored-By: Kutesir Co-Authored-By: Sentry --- Features/Backup/BackupView.swift | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Features/Backup/BackupView.swift b/Features/Backup/BackupView.swift index 5663f44..fe44232 100644 --- a/Features/Backup/BackupView.swift +++ b/Features/Backup/BackupView.swift @@ -644,8 +644,6 @@ struct BackupView: View { private var circleSection: some View { VStack(spacing: 0) { - pullZone - ZStack { // Ripple expands outward on backup trigger Circle() @@ -657,8 +655,6 @@ struct BackupView: View { ringHero } - .offset(y: min(pullProgress * 0.26, 14)) - .animation(.spring(response: 0.38, dampingFraction: 0.8), value: pullProgress) .gesture(pullGesture) .padding(.bottom, 4) @@ -670,6 +666,11 @@ struct BackupView: View { .padding(.horizontal, AppTheme.hPad) .padding(.bottom, 20) } + // Pull zone floats above the ring without affecting its layout position + .overlay(alignment: .top) { + pullZone + .offset(y: -max(0, pullProgress * 0.52)) + } } private var pullZone: some View {