mirror of
https://github.com/ivanvorobei/SwiftUI.git
synced 2026-04-27 11:07:11 +02:00
Add Async image loading
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
See LICENSE folder for this sample’s licensing information.
|
||||
|
||||
Abstract:
|
||||
A view showing the details for a landmark.
|
||||
*/
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct LandmarkDetail: View {
|
||||
@EnvironmentObject var userData: UserData
|
||||
var landmark: Landmark
|
||||
|
||||
var landmarkIndex: Int {
|
||||
userData.landmarks.firstIndex(where: { $0.id == landmark.id })!
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
MapView(coordinate: landmark.locationCoordinate)
|
||||
.edgesIgnoringSafeArea(.top)
|
||||
.frame(height: 300)
|
||||
|
||||
CircleImage(image: landmark.image(forSize: 250))
|
||||
.offset(x: 0, y: -130)
|
||||
.padding(.bottom, -130)
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
HStack {
|
||||
Text(verbatim: landmark.name)
|
||||
.font(.title)
|
||||
|
||||
Button(action: {
|
||||
self.userData.landmarks[self.landmarkIndex]
|
||||
.isFavorite.toggle()
|
||||
}) {
|
||||
if self.userData.landmarks[self.landmarkIndex]
|
||||
.isFavorite {
|
||||
Image(systemName: "star.fill")
|
||||
.foregroundColor(Color.yellow)
|
||||
} else {
|
||||
Image(systemName: "star")
|
||||
.foregroundColor(Color.gray)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HStack(alignment: .top) {
|
||||
Text(verbatim: landmark.park)
|
||||
.font(.subheadline)
|
||||
Spacer()
|
||||
Text(verbatim: landmark.state)
|
||||
.font(.subheadline)
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
struct LandmarkDetail_Preview: PreviewProvider {
|
||||
static var previews: some View {
|
||||
let userData = UserData()
|
||||
return LandmarkDetail(landmark: userData.landmarks[0])
|
||||
.environmentObject(userData)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user