mirror of
https://github.com/ivanvorobei/SwiftUI.git
synced 2026-03-12 05:21:47 +01:00
69 lines
1.8 KiB
Swift
Executable File
69 lines
1.8 KiB
Swift
Executable File
/*
|
||
See LICENSE folder for this sample’s licensing information.
|
||
|
||
Abstract:
|
||
A view displaying inforamtion about a hike, including an elevation graph.
|
||
*/
|
||
|
||
import SwiftUI
|
||
|
||
struct HikeView: View {
|
||
var hike: Hike
|
||
@State private var showDetail = false
|
||
|
||
var transition: AnyTransition {
|
||
let insertion = AnyTransition.move(edge: .trailing)
|
||
.combined(with: .opacity)
|
||
let removal = AnyTransition.scale()
|
||
.combined(with: .opacity)
|
||
return .asymmetric(insertion: insertion, removal: removal)
|
||
}
|
||
|
||
var body: some View {
|
||
VStack {
|
||
HStack {
|
||
HikeGraph(hike: hike, path: \.elevation)
|
||
.frame(width: 50, height: 30)
|
||
.animation(nil)
|
||
|
||
VStack(alignment: .leading) {
|
||
Text(verbatim: hike.name)
|
||
.font(.headline)
|
||
Text(verbatim: hike.distanceText)
|
||
}
|
||
|
||
Spacer()
|
||
|
||
Button(action: {
|
||
withAnimation {
|
||
self.showDetail.toggle()
|
||
}
|
||
}) {
|
||
Image(systemName: "chevron.right.circle")
|
||
.imageScale(.large)
|
||
.rotationEffect(.degrees(showDetail ? 90 : 0))
|
||
.scaleEffect(showDetail ? 1.5 : 1)
|
||
.padding()
|
||
}
|
||
}
|
||
|
||
if showDetail {
|
||
HikeDetail(hike: hike)
|
||
.transition(transition)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
#if DEBUG
|
||
struct HikeView_Previews: PreviewProvider {
|
||
static var previews: some View {
|
||
VStack {
|
||
HikeView(hike: hikeData[0])
|
||
.padding()
|
||
Spacer()
|
||
}
|
||
}
|
||
}
|
||
#endif
|