refactored button to external func, fixed bug where currentId and currentOffset wasnt saved on switch

undo
Saint 2023-05-31 19:42:11 -04:00
parent 6ab9d30ba0
commit d9ed0d2da9
4 changed files with 64 additions and 45 deletions

View File

@ -51,13 +51,13 @@ public class VisibilityTracker<ID: Hashable>: ObservableObject {
let isVisible = containerBounds.contains(topLeft) || containerBounds.contains(bottomRight) let isVisible = containerBounds.contains(topLeft) || containerBounds.contains(bottomRight)
let wasVisible = visibleViews[id] != nil let wasVisible = visibleViews[id] != nil
print("report content bounds start") // print("report content bounds start")
print(id) // print(id)
print(bounds.width) // print(bounds.width)
print(bounds.height) // print(bounds.height)
print(bounds.origin) // print(bounds.origin)
print(containerBounds) // print(containerBounds)
print("report content bounds end") // print("report content bounds end")
visibleViews[id] = -1 * (bounds.origin.y - containerBounds.origin.y) visibleViews[id] = -1 * (bounds.origin.y - containerBounds.origin.y)

View File

@ -9,89 +9,97 @@
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>3</integer> <integer>12</integer>
</dict> </dict>
<key>Associations (Playground) 2.xcscheme</key> <key>Associations (Playground) 2.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>4</integer> <integer>13</integer>
</dict> </dict>
<key>Associations (Playground).xcscheme</key> <key>Associations (Playground).xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>2</integer> <integer>11</integer>
</dict> </dict>
<key>MyPlayground (Playground) 1.xcscheme</key> <key>MyPlayground (Playground) 1.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>6</integer> <integer>9</integer>
</dict> </dict>
<key>MyPlayground (Playground) 2.xcscheme</key> <key>MyPlayground (Playground) 2.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>7</integer> <integer>10</integer>
</dict> </dict>
<key>MyPlayground (Playground).xcscheme</key> <key>MyPlayground (Playground).xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>5</integer> <integer>8</integer>
</dict> </dict>
<key>Tour (Playground) 1.xcscheme</key> <key>Tour (Playground) 1.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>9</integer> <integer>6</integer>
</dict> </dict>
<key>Tour (Playground) 2.xcscheme</key> <key>Tour (Playground) 2.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>10</integer> <integer>7</integer>
</dict> </dict>
<key>Tour (Playground).xcscheme</key> <key>Tour (Playground).xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>8</integer> <integer>5</integer>
</dict> </dict>
<key>TransactionObserver (Playground) 1.xcscheme</key> <key>TransactionObserver (Playground) 1.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>12</integer> <integer>3</integer>
</dict> </dict>
<key>TransactionObserver (Playground) 2.xcscheme</key> <key>TransactionObserver (Playground) 2.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>13</integer> <integer>4</integer>
</dict> </dict>
<key>TransactionObserver (Playground).xcscheme</key> <key>TransactionObserver (Playground).xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>
<false/> <false/>
<key>orderHint</key> <key>orderHint</key>
<integer>11</integer> <integer>1</integer>
</dict> </dict>
<key>gloss.xcscheme_^#shared#^_</key> <key>gloss.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>0</integer> <integer>2</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>85431A842905F4F500EE0760</key>
<dict>
<key>primary</key>
<true/>
</dict> </dict>
</dict> </dict>
</dict> </dict>

View File

@ -62,7 +62,7 @@ func goToRibbon(selectedRibbon: Ribbon,
// @Binding var scrollId : String? // @Binding var scrollId : String?
// @Binding var scrollOffset : CGFloat? // @Binding var scrollOffset : CGFloat?
// @Binding var refresh : Bool // @Binding var refresh : Bool
print("SELECTED RIBBON", selectedRibbon) // print("SELECTED RIBBON", selectedRibbon)
let userDefaults = UserDefaults.standard let userDefaults = UserDefaults.standard
var scrollOffsetToSave = currentOffset var scrollOffsetToSave = currentOffset
var scrollIdToSave = currentId var scrollIdToSave = currentId
@ -77,13 +77,13 @@ func goToRibbon(selectedRibbon: Ribbon,
// refresh.toggle() // refresh.toggle()
if (selectedRibbon.id != destRibbon.id!) { if (selectedRibbon.id != destRibbon.id!) {
// Print("switching") print("switching ribbons")
scrollId.wrappedValue = destRibbon.scrollId scrollId.wrappedValue = destRibbon.scrollId
print("setting scroll offset") // print("setting scroll offset")
scrollOffset.wrappedValue = CGFloat(destRibbon.scrollOffset) scrollOffset.wrappedValue = CGFloat(destRibbon.scrollOffset)
print(scrollOffset.wrappedValue) // print(scrollOffset.wrappedValue)
print("end setting scroll offset") // print("end setting scroll offset")
refresh.wrappedValue.toggle() refresh.wrappedValue.toggle()
//scrollId = "10" //scrollId = "10"
@ -93,8 +93,8 @@ func goToRibbon(selectedRibbon: Ribbon,
userDefaults.set(scrollOffset.wrappedValue, forKey: "currentOffset") userDefaults.set(scrollOffset.wrappedValue, forKey: "currentOffset")
var updateSelectRibbon = SelectedRibbon(id: Int64(1), ribbonId: destRibbon.id!) var updateSelectRibbon = SelectedRibbon(id: Int64(1), ribbonId: destRibbon.id!)
print("Saving selected ribbon") // print("Saving selected ribbon")
print(updateSelectRibbon) // print(updateSelectRibbon)
do { do {
_ = try await appDatabase.saveSelectedRibbon(&updateSelectRibbon) _ = try await appDatabase.saveSelectedRibbon(&updateSelectRibbon)
} catch { } catch {
@ -106,14 +106,14 @@ func goToRibbon(selectedRibbon: Ribbon,
updatedRibbon.scrollId = scrollIdToSave! updatedRibbon.scrollId = scrollIdToSave!
_ = try await appDatabase.saveRibbon(&updatedRibbon) _ = try await appDatabase.saveRibbon(&updatedRibbon)
print("saved updatedRibbon", updatedRibbon) // print("saved updatedRibbon", updatedRibbon)
print("UPDATED") // print("UPDATED")
scrollOffsetToSave = userDefaults.object(forKey: "currentOffset") as? CGFloat scrollOffsetToSave = userDefaults.object(forKey: "currentOffset") as? CGFloat
scrollIdToSave = userDefaults.object(forKey: "currentId") as? String scrollIdToSave = userDefaults.object(forKey: "currentId") as? String
print("scrollOffsetToSave: ", scrollOffsetToSave) // print("scrollOffsetToSave: ", scrollOffsetToSave)
print("scrollIdToSave: ", scrollIdToSave) // print("scrollIdToSave: ", scrollIdToSave)
} }
} }
@ -128,7 +128,6 @@ struct SwitchButton : View {
@Query(SelectedRibbonRequest()) private var sr: [Ribbon] @Query(SelectedRibbonRequest()) private var sr: [Ribbon]
@State var saveOffset = CGFloat() @State var saveOffset = CGFloat()
var body: some View { var body: some View {
// ForEach(sr) { selectedRibbon in // ForEach(sr) { selectedRibbon in
@ -396,13 +395,24 @@ struct ContentView: View {
//gTracker!.visibleViews["123123"] = CGFloat(100) //gTracker!.visibleViews["123123"] = CGFloat(100)
// Print("ON CHANGE", gTracker!.visibleViews) // Print("ON CHANGE", gTracker!.visibleViews)
// Print("removing", gTracker!.visibleViews.removeAll()) // Print("removing", gTracker!.visibleViews.removeAll())
Print("first scroll to")
Print(scrollId)
proxy.scrollTo(scrollId! , anchor: .top) proxy.scrollTo(scrollId! , anchor: .top)
currentId = scrollId!
Task { Task {
// try? await Task.sleep(nanoseconds: 1_000_000_000) // try? await Task.sleep(nanoseconds: 1_000_000_000)
// try? await Task.sleep(nanoseconds: 1_000_000_000)
proxy.scrollTo(scrollId! , anchor: .top)
DispatchQueue.main.async { DispatchQueue.main.async {
// setScrollOffset = CGFloat(scrollOffset!) // setScrollOffset = CGFloat(scrollOffset!)
setScrollOffset = CGFloat(Int(currentOffset!) * -1 + Int(scrollOffset!)) setScrollOffset = CGFloat(Int(currentOffset!) * -1 + Int(scrollOffset!))
currentOffset = scrollOffset!
refresh2.toggle() refresh2.toggle()
} }
@ -410,18 +420,18 @@ struct ContentView: View {
//} //}
} }
.introspectScrollView { scrollView in .introspectScrollView { scrollView in
Print("introspect") // Print("introspect")
// scrollView.delegate = scrollDelegate // scrollView.delegate = scrollDelegate
//Print("Scroll delegate offset", scrollDelegate.scrollOffset) //Print("Scroll delegate offset", scrollDelegate.scrollOffset)
if (setScrollOffset != nil) { if (setScrollOffset != nil) {
Print("Setting scroll offset in introspect", setScrollOffset) // Print("Setting scroll offset in introspect", setScrollOffset)
scrollView.contentOffset.y = scrollView.contentOffset.y + setScrollOffset! scrollView.contentOffset.y = scrollView.contentOffset.y + setScrollOffset!
DispatchQueue.main.async { setScrollOffset = nil } DispatchQueue.main.async { setScrollOffset = nil }
} }
// if (thisScrollView == nil) { // if (thisScrollView == nil) {
Print("init scroll") // Print("init scroll")
// thisScrollView = scrollView // thisScrollView = scrollView
// scrollView.contentOffset.y = CGFloat(selectedRibbon[0].scrollOffset) // scrollView.contentOffset.y = CGFloat(selectedRibbon[0].scrollOffset)
// } // }
@ -475,15 +485,15 @@ struct ContentView: View {
// @Environment(\.appDatabase) var appDatabase // @Environment(\.appDatabase) var appDatabase
switch change { // switch change {
case .shown: print("\(id) shown") // case .shown: print("\(id) shown")
case .hidden: print("\(id) hidden") // case .hidden: print("\(id) hidden")
} // }
print("VISIBILITY CHANGED STARTED") // print("VISIBILITY CHANGED STARTED")
print(tracker.visibleViews) // print(tracker.visibleViews)
gTracker = tracker // gTracker = tracker
print(tracker.sortedViewIDs) // print(tracker.sortedViewIDs)
print("VISIBILITY CHANGED ENDED") // print("VISIBILITY CHANGED ENDED")
// if (currentId != nil) { // if (currentId != nil) {
// currentOffset = tracker.visibleViews[currentId!]! // currentOffset = tracker.visibleViews[currentId!]!
// } // }
@ -496,6 +506,7 @@ struct ContentView: View {
currentId = tracker.sortedViewIDs[0] currentId = tracker.sortedViewIDs[0]
if (currentId != nil) { if (currentId != nil) {
print("current ID:", currentId)
// Access Shared Defaults Object // Access Shared Defaults Object
// let userDefaults = UserDefaults.standard // let userDefaults = UserDefaults.standard
@ -510,7 +521,7 @@ struct ContentView: View {
// var updateScrollState = ScrollState(id: Int64(1), // var updateScrollState = ScrollState(id: Int64(1),
// scrollId: currentId!, // scrollId: currentId!,
// scrollOffset: Int64(tracker.visibleViews[currentId!]!)) // scrollOffset: Int64(tracker.visibleViews[currentId!]!))
Print("Savingg") // Print("Savingg")
//Print(updateScrollState) //Print(updateScrollState)
// Task(priority: .default) { // Task(priority: .default) {