Есть ли способ использовать карту Mapbox в Swiftui NavigationStack без увеличения памяти с каждым новым представлением?IOS

Программируем под IOS
Ответить
Anonymous
 Есть ли способ использовать карту Mapbox в Swiftui NavigationStack без увеличения памяти с каждым новым представлением?

Сообщение Anonymous »

Я пытаюсь построить приложение для iOS, где пользовательские профили имеют компонент карты для них. Рекурсивная навигация в моем навигационном магазине вызывает проблемы с памятью, поскольку каждая карта, которую я добавляю в стек, добавляет 150 МБ. Поток похож на этот (аналогично Instagram, если в каждом профиле была карта) < /p>

Экран профиля (с картой) -> Пользователь, затем нажимает на пост < /li>
Пост пользователя (полный экран без карты) -> Пользователь, затем нажавает на профиль < /li>
Профиль (с картой)
. 13. /> Пользователь может сделать этот цикл столько раз, сколько захочет. Только карта в верхней части стека должна храниться в памяти, но это не так.import SwiftUI
import MapboxMaps
import CoreLocation

@MainActor
class MapViewModel: ObservableObject {
weak var mapboxMap: MapboxMap?
@Published var viewport: Viewport

init(center: CLLocationCoordinate2D, zoom: CGFloat = 10) {
self.viewport = .camera(center: center, zoom: zoom)
}

func resetMap() {
mapboxMap = nil
}
}

struct TestView: View {
@State private var path: [Int] = []

var body: some View {
NavigationStack(path: $path) {
MapScreen(depth: 0, push: { nextDepth in
path.append(nextDepth)
})
.navigationDestination(for: Int.self) { depth in
MapScreen(depth: depth, push: { nextDepth in
path.append(nextDepth)
})
}
}
}
}

struct MapScreen: View {
let depth: Int
let push: (Int) -> Void

@StateObject private var viewModel: MapViewModel

init(depth: Int, push: @escaping (Int) -> Void) {
self.depth = depth
self.push = push

_viewModel = StateObject(wrappedValue: MapViewModel(
center: .init(latitude: 40, longitude: -75),
zoom: 10
))
}

var body: some View {
ZStack {
MapReader { proxy in
Map(viewport: $viewModel.viewport)
.onStyleLoaded { _ in
viewModel.mapboxMap = proxy.map
}
.ignoresSafeArea()
}

VStack {
Spacer()
HStack {
Spacer()
Button {
push(depth + 1)
} label: {
ZStack {
Circle()
.fill(Color.blue)
.frame(width: 60, height: 60)
.shadow(radius: 4)
Image(systemName: "arrow.right")
.foregroundColor(.white)
.font(.system(size: 24, weight: .bold))
}
}
.padding()
}
}
}
.navigationTitle("Map \(depth)")
.navigationBarTitleDisplayMode(.inline)
.onDisappear {
viewModel.resetMap()
}
}
}

< /code>
Каждый раз, когда кнопка нажимается в этом представлении, память увеличивается. Есть ли способ использовать карту в навигационном магазине без этой проблемы с памятью? Или мне нужно придумать навигационную систему без навигации? 11.15.2.

Подробнее здесь: https://stackoverflow.com/questions/797 ... out-increa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»