Я изучаю 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
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение