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 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)
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)
}
// if (visibleViews[id]! > 0) {
// visibleViews.removeValue(forKey: id)
// }
sortViews()
action(id, .shown, self)
@ -75,7 +92,8 @@ public class VisibilityTracker<ID: Hashable>: ObservableObject {
}
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 }
}
}

View File

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

View File

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