Я пытаюсь построить приложение для 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
Есть ли способ использовать карту Mapbox в Swiftui NavigationStack без увеличения памяти с каждым новым представлением? ⇐ IOS
Программируем под IOS
1759484418
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.
Подробнее здесь: [url]https://stackoverflow.com/questions/79781628/is-there-any-way-to-use-a-mapbox-map-in-a-swiftui-navigationstack-without-increa[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия