scroll seems to be working good

undo
Saint 2023-04-23 23:41:17 -04:00
parent ea3ac33f99
commit 9e19199b87
4 changed files with 65 additions and 27 deletions

View File

@ -51,11 +51,28 @@ 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(id)
print(bounds.width)
print(bounds.height)
print(bounds.origin)
print(containerBounds)
print("report content bounds end")
visibleViews[id] = -1 * (bounds.origin.y - containerBounds.origin.y) visibleViews[id] = -1 * (bounds.origin.y - containerBounds.origin.y)
if (abs(visibleViews[id]! ) > 500) { // if (abs(visibleViews[id]! ) > 500 || visibleViews[id]! < 0) {
if (((id.hashValue) != "1".hashValue && visibleViews[id]! < 0) ||
bounds.width == 0 || bounds.height == 0
|| bounds.origin.x == 0 || bounds.origin.y == 0
|| abs(visibleViews[id]! ) > 500 ) {
visibleViews.removeValue(forKey: id) visibleViews.removeValue(forKey: id)
} }
// if (visibleViews[id]! > 0) {
// visibleViews.removeValue(forKey: id)
// }
sortViews() sortViews()
action(id, .shown, self) action(id, .shown, self)
@ -75,7 +92,8 @@ public class VisibilityTracker<ID: Hashable>: ObservableObject {
} }
func sortViews() { func sortViews() {
let sortedPairs = visibleViews.sorted(by: { $0.1 < $1.1 }) let sortedPairs = visibleViews.sorted(by: { Int($0.1) < Int($1.1) })
// let sortedPairs = visibleViews.sorted(by: { $0 < $1 })
sortedViewIDs = sortedPairs.map { $0.0 } sortedViewIDs = sortedPairs.map { $0.0 }
} }
} }

View File

@ -443,7 +443,7 @@
INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 16.2; IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
@ -479,7 +479,7 @@
INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 16.2; IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",

View File

@ -13,6 +13,11 @@ import os
let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "network") let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "network")
var currentId : String?
var currentOffset : CGFloat?
var gTracker: VisibilityTracker<String>?
// var curBook = "John" // var curBook = "John"
extension UserDefaults { extension UserDefaults {
@ -66,24 +71,28 @@ struct SwitchButton : View {
Print("SELECTED RIBBON", selectedRibbon) Print("SELECTED RIBBON", selectedRibbon)
let userDefaults = UserDefaults.standard let userDefaults = UserDefaults.standard
var scrollOffsetToSave = userDefaults.object(forKey: "currentOffset") as? CGFloat // var scrollOffsetToSave = userDefaults.object(forKey: "currentOffset") as? CGFloat
var scrollIdToSave = userDefaults.object(forKey: "currentId") as? String // var scrollIdToSave = userDefaults.object(forKey: "currentId") as? String
var scrollOffsetToSave = currentOffset
var scrollIdToSave = currentId
Print("scrollOffsetToSave: ", scrollOffsetToSave) Print("scrollOffsetToSave: ", scrollOffsetToSave)
Print("scrollIdToSave: ", scrollIdToSave) Print("scrollIdToSave: ", scrollIdToSave)
var updatedRibbon = selectedRibbon var updatedRibbon = selectedRibbon
scrollId = "10" // scrollId = "10"
scrollOffset = CGFloat(100) // scrollOffset = CGFloat(100)
refresh.toggle() // refresh.toggle()
if (selectedRibbon.id != ribbon.id!) { if (selectedRibbon.id != ribbon.id!) {
Print("switching") Print("switching")
// scrollId = ribbon.scrollId scrollId = ribbon.scrollId
// scrollOffset = CGFloat(ribbon.scrollOffset) scrollOffset = CGFloat(ribbon.scrollOffset)
refresh.toggle()
//scrollId = "10" //scrollId = "10"
//scrollOffset = CGFloat(100) //scrollOffset = CGFloat(100)
@ -152,13 +161,13 @@ func makeVerseView(seg: SegDenorm) -> some View {
let verse = try! decoder.decode(Verse.self, from: item.data(using: .utf8)!) let verse = try! decoder.decode(Verse.self, from: item.data(using: .utf8)!)
retView = retView + Text(String(verse.verse)) retView = retView + Text(String(verse.verse))
.font(Font.custom("AveriaSerifLibre-Regular", size: 20)) .font(Font.custom("AveriaSerifLibre-Regular", size: 6))
.baselineOffset(6.0) .baselineOffset(6.0)
.foregroundColor(Color.white) .foregroundColor(Color.white)
retView = retView + Text(verse.body) retView = retView + Text(verse.body)
.foregroundColor(Color.white) .foregroundColor(Color.white)
.font(Font.custom("AveriaSerifLibre-Regular", size: 30)) .font(Font.custom("AveriaSerifLibre-Regular", size: 15))
}) })
return retView return retView
} }
@ -183,7 +192,7 @@ private struct SegRow: View {
retView = retView + Text(String(verse.verse)) retView = retView + Text(String(verse.verse))
// Text(seg.body) // Text(seg.body)
// .contentShape(Rectangle()) // .contentShape(Rectangle())
.font(Font.custom("AveriaSerifLibre-Regular", size: 20)) .font(Font.custom("AveriaSerifLibre-Regular", size: 10))
.baselineOffset(6.0) .baselineOffset(6.0)
.foregroundColor(Color.white) .foregroundColor(Color.white)
@ -191,7 +200,7 @@ private struct SegRow: View {
// .frame(maxWidth: .infinity, alignment: .leading) // .frame(maxWidth: .infinity, alignment: .leading)
// .contentShape(Rectangle()) // .contentShape(Rectangle())
.foregroundColor(Color.white) .foregroundColor(Color.white)
.font(Font.custom("AveriaSerifLibre-Regular", size: 30)) .font(Font.custom("AveriaSerifLibre-Regular", size: 20))
// .listRowBackground(Color(red: 0.2, green: 0.8, blue: 0.2)) // .listRowBackground(Color(red: 0.2, green: 0.8, blue: 0.2))
// .listRowInsets(EdgeInsets()) // .listRowInsets(EdgeInsets())
// .padding(EdgeInsets(top: 10, leading: 20, bottom: 40, trailing: 20)) // .padding(EdgeInsets(top: 10, leading: 20, bottom: 40, trailing: 20))
@ -231,8 +240,8 @@ struct ContentView: View {
@State var scrollUpdate = false @State var scrollUpdate = false
@State var initLoad = false @State var initLoad = false
@State var currentId : String? // @State var currentId : String?
@State var currentOffset = CGFloat() // @State var currentOffset = CGFloat()
// set this to scroll to area // set this to scroll to area
@State var scrollId : String? @State var scrollId : String?
@ -336,11 +345,14 @@ struct ContentView: View {
} }
.onChange(of: refresh) { target in .onChange(of: refresh) { target in
//if let target = target { //if let target = target {
//gTracker!.visibleViews["123123"] = CGFloat(100)
Print("ON CHANGE", gTracker!.visibleViews)
Print("removing", gTracker!.visibleViews.removeAll())
proxy.scrollTo(scrollId! , anchor: .top) proxy.scrollTo(scrollId! , anchor: .top)
DispatchQueue.main.async { DispatchQueue.main.async {
setScrollOffset = scrollOffset setScrollOffset = CGFloat(scrollOffset!)
refresh2.toggle() refresh2.toggle()
} }
//} //}
} }
@ -408,33 +420,39 @@ struct ContentView: View {
func handleVisibilityChanged(_ id: String, change: VisibilityChange, tracker: VisibilityTracker<String>) { func handleVisibilityChanged(_ id: String, change: VisibilityChange, tracker: VisibilityTracker<String>) {
// @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(tracker.visibleViews) print(tracker.visibleViews)
gTracker = tracker
print(tracker.sortedViewIDs)
print("VISIBILITY CHANGED ENDED")
// if (currentId != nil) { // if (currentId != nil) {
// currentOffset = tracker.visibleViews[currentId!]! // currentOffset = tracker.visibleViews[currentId!]!
// } // }
let visibleViews = Array(tracker.visibleViews.keys) let visibleViews2 = Array(tracker.visibleViews.keys)
if (visibleViews.count == 0) { if (visibleViews2.count == 0) {
return return
} }
let currentId = Array(tracker.visibleViews.keys)[0] currentId = tracker.sortedViewIDs[0]
if (currentId != nil) { if (currentId != nil) {
// Access Shared Defaults Object // Access Shared Defaults Object
let userDefaults = UserDefaults.standard // let userDefaults = UserDefaults.standard
// Write/Set Value // Write/Set Value
Print(currentId) Print(currentId!)
Print(tracker.visibleViews[currentId]!) // Print(tracker.visibleViews[currentId?]!)
userDefaults.set(currentId, forKey: "currentId") // userDefaults.set(currentId, forKey: "currentId")
userDefaults.set(tracker.visibleViews[currentId]!, forKey: "currentOffset") // userDefaults.set(tracker.visibleViews[currentId]!, forKey: "currentOffset")
currentOffset = tracker.visibleViews[currentId!]!
// userDefaults.set(tracker.visibleViews[currentId!]!, forKey: "currentOffset") // userDefaults.set(tracker.visibleViews[currentId!]!, forKey: "currentOffset")
// var updateScrollState = ScrollState(id: Int64(1), // var updateScrollState = ScrollState(id: Int64(1),
// scrollId: currentId!, // scrollId: currentId!,
@ -451,6 +469,8 @@ struct ContentView: View {
// } // }
// } // }
} }
// gTracker!.visibleViews.removeAll()
} }