ContentView.swift 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. //
  2. // ContentView.swift
  3. // ACarouselDemo iOS
  4. //
  5. // Created by Autumn on 2020/11/16.
  6. //
  7. import SwiftUI
  8. import ACarousel
  9. struct Item: Identifiable {
  10. let id = UUID()
  11. let image: Image
  12. }
  13. let roles = ["Luffy", "Zoro", "Sanji", "Nami", "Usopp", "Chopper", "Robin", "Franky", "Brook"]
  14. struct ContentView: View {
  15. @State var spacing: CGFloat = 10
  16. @State var headspace: CGFloat = 10
  17. @State var sidesScaling: CGFloat = 0.8
  18. @State var isWrap: Bool = false
  19. @State var autoScroll: Bool = false
  20. @State var time: TimeInterval = 1
  21. @State var currentIndex: Int = 0
  22. var body: some View {
  23. VStack {
  24. Text("\(currentIndex + 1)/\(roles.count)")
  25. Spacer().frame(height: 40)
  26. ACarousel(roles,
  27. id: \.self,
  28. index: $currentIndex,
  29. spacing: spacing,
  30. headspace: headspace,
  31. sidesScaling: sidesScaling,
  32. isWrap: isWrap,
  33. autoScroll: autoScroll ? .active(time) : .inactive) { name in
  34. Image(name)
  35. .resizable()
  36. .scaledToFill()
  37. .frame(height: 300)
  38. .cornerRadius(30)
  39. }
  40. .frame(height: 300)
  41. Spacer()
  42. ControlPanel(spacing: $spacing,
  43. headspace: $headspace,
  44. sidesScaling: $sidesScaling,
  45. isWrap: $isWrap,
  46. autoScroll: $autoScroll,
  47. duration: $time)
  48. Spacer()
  49. }
  50. }
  51. }
  52. struct ControlPanel: View {
  53. @Binding var spacing: CGFloat
  54. @Binding var headspace: CGFloat
  55. @Binding var sidesScaling: CGFloat
  56. @Binding var isWrap: Bool
  57. @Binding var autoScroll: Bool
  58. @Binding var duration: TimeInterval
  59. var body: some View {
  60. VStack {
  61. Group {
  62. HStack {
  63. Text("spacing: ").frame(width: 120)
  64. Slider(value: $spacing, in: 0...30, minimumValueLabel: Text("0"), maximumValueLabel: Text("30")) { EmptyView() }
  65. }
  66. HStack {
  67. Text("headspace: ").frame(width: 120)
  68. Slider(value: $headspace, in: 0...30, minimumValueLabel: Text("0"), maximumValueLabel: Text("30")) { EmptyView() }
  69. }
  70. HStack {
  71. Text("sidesScaling: ").frame(width: 120)
  72. Slider(value: $sidesScaling, in: 0...1, minimumValueLabel: Text("0"), maximumValueLabel: Text("1")) { EmptyView() }
  73. }
  74. HStack {
  75. Toggle(isOn: $isWrap, label: {
  76. Text("wrap: ").frame(width: 120)
  77. })
  78. }
  79. VStack {
  80. HStack {
  81. Toggle(isOn: $autoScroll, label: {
  82. Text("autoScroll: ").frame(width: 120)
  83. })
  84. }
  85. if autoScroll {
  86. HStack {
  87. Text("duration: ").frame(width: 120)
  88. Slider(value: $duration, in: 1...10, minimumValueLabel: Text("1"), maximumValueLabel: Text("10")) { EmptyView() }
  89. }
  90. }
  91. }
  92. }
  93. }
  94. .padding([.horizontal, .bottom])
  95. }
  96. }
  97. struct ContentView_Previews: PreviewProvider {
  98. static var previews: some View {
  99. ContentView()
  100. }
  101. }