Я изучаю Swiftui и пытаюсь внедрить приложение для фотогалереи, используя LazyVgrid.
в цикле Foreach в цикле метода ContentView's Body (), у меня есть миниатюрный вид для каждой фотографии, выведенной из библиотеки. < / p>
var body: some View {
NavigationView {
let minItemWidth: CGFloat = 100
let spacing: CGFloat = 2
let screenWidth = UIScreen.main.bounds.width
let columns = Int((screenWidth + spacing) / (minItemWidth + spacing))
let totalSpacing = spacing * CGFloat(columns - 1)
let itemWidth = (screenWidth - totalSpacing) / CGFloat(columns)
ZStack {
ScrollView {
LazyVGrid(columns: [GridItem(.adaptive(minimum: 100))], spacing: 2) {
ForEach(contents) { content in
ThumbnailView(content: content.phAsset)
.frame(width: itemWidth, height: itemWidth)
.onTapGesture {
selectedContent = content
printItemInfo(item: content)
}
.padding(4)
.background(Color.blue.opacity(0.5))
.clipped()
}
}
.padding(2)
}
.navigationTitle("Photos Library")
.onAppear(perform: loadContents)
.sheet(item: $selectedContent) { content in
if content.phAsset.mediaType == .image {
ImagePlayerView(asset: content.phAsset)
} else if content.phAsset.mediaType == .video {
VideoPlayerView(asset: content.phAsset)
}
}
if isLoading {
ProgressView("Loading...")
.progressViewStyle(CircularProgressViewStyle())
.scaleEffect(1.5, anchor: .center)
}
}
}
}
< /code>
и ThumbnailView: < /p>
struct ThumbnailView: View {
let content: PHAsset
@State private var image: UIImage? = nil
var body: some View {
Group {
if let image = image {
Image(uiImage: image)
.resizable()
.scaledToFill()
} else {
Color.gray
}
}
.onAppear(perform: loadImage)
}
func loadImage() {
let imageManager = PHImageManager.default()
let requestOptions = PHImageRequestOptions()
requestOptions.isSynchronous = false
imageManager.requestImage(for: content, targetSize: CGSize(width: 100, height: 100), contentMode: .aspectFill, options: requestOptions) { (image, _) in
self.image = image
}
}
}
< /code>
Проблема в том, что когда я нажимаю на определенную область элемента, открытый элемент не ожидается. Я попытался отладки этой проблемы в течение целого дня и обнаружил, что если я прокомментировал модификатор «.clippuft ()» на ThumbnailView, я вижу, что виды предметов Lazyvgrid перекрываются, это причина, по которой вид на вершине открывается Кроме того, я думал, что нажал. Это довольно странно для меня, так как я верю, что если я укажу размер представления. Я новичок в программировании Swiftui и iOS, любая помощь очень ценится.
Подробнее здесь: https://stackoverflow.com/questions/794 ... t-expected
LazyVgrid Ittemt Test Test область не ожидается ⇐ IOS
Программируем под IOS
-
Anonymous
1738416206
Anonymous
Я изучаю Swiftui и пытаюсь внедрить приложение для фотогалереи, используя LazyVgrid.
в цикле Foreach в цикле метода ContentView's Body (), у меня есть миниатюрный вид для каждой фотографии, выведенной из библиотеки. < / p>
var body: some View {
NavigationView {
let minItemWidth: CGFloat = 100
let spacing: CGFloat = 2
let screenWidth = UIScreen.main.bounds.width
let columns = Int((screenWidth + spacing) / (minItemWidth + spacing))
let totalSpacing = spacing * CGFloat(columns - 1)
let itemWidth = (screenWidth - totalSpacing) / CGFloat(columns)
ZStack {
ScrollView {
LazyVGrid(columns: [GridItem(.adaptive(minimum: 100))], spacing: 2) {
ForEach(contents) { content in
ThumbnailView(content: content.phAsset)
.frame(width: itemWidth, height: itemWidth)
.onTapGesture {
selectedContent = content
printItemInfo(item: content)
}
.padding(4)
.background(Color.blue.opacity(0.5))
.clipped()
}
}
.padding(2)
}
.navigationTitle("Photos Library")
.onAppear(perform: loadContents)
.sheet(item: $selectedContent) { content in
if content.phAsset.mediaType == .image {
ImagePlayerView(asset: content.phAsset)
} else if content.phAsset.mediaType == .video {
VideoPlayerView(asset: content.phAsset)
}
}
if isLoading {
ProgressView("Loading...")
.progressViewStyle(CircularProgressViewStyle())
.scaleEffect(1.5, anchor: .center)
}
}
}
}
< /code>
и ThumbnailView: < /p>
struct ThumbnailView: View {
let content: PHAsset
@State private var image: UIImage? = nil
var body: some View {
Group {
if let image = image {
Image(uiImage: image)
.resizable()
.scaledToFill()
} else {
Color.gray
}
}
.onAppear(perform: loadImage)
}
func loadImage() {
let imageManager = PHImageManager.default()
let requestOptions = PHImageRequestOptions()
requestOptions.isSynchronous = false
imageManager.requestImage(for: content, targetSize: CGSize(width: 100, height: 100), contentMode: .aspectFill, options: requestOptions) { (image, _) in
self.image = image
}
}
}
< /code>
Проблема в том, что когда я нажимаю на определенную область элемента, открытый элемент не ожидается. Я попытался отладки этой проблемы в течение целого дня и обнаружил, что если я прокомментировал модификатор «.clippuft ()» на ThumbnailView, я вижу, что виды предметов Lazyvgrid перекрываются, это причина, по которой вид на вершине открывается Кроме того, я думал, что нажал. Это довольно странно для меня, так как я верю, что если я укажу размер представления. Я новичок в программировании Swiftui и iOS, любая помощь очень ценится.
Подробнее здесь: [url]https://stackoverflow.com/questions/79405053/lazyvgrid-item-hit-test-area-is-not-expected[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия