Skip to content

Commit dd66cac

Browse files
committed
Update SwiftUI Example
1 parent 76dfdb4 commit dd66cac

5 files changed

Lines changed: 42 additions & 21 deletions

File tree

SwiftUI/ConfigView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import SwiftUI
1010
import UIKit
1111
import HXPhotoPicker
1212

13+
@available(iOS 13.0, *)
1314
struct ConfigView: UIViewControllerRepresentable {
1415

1516
@Binding var config: PickerConfiguration

SwiftUI/ContentView.swift

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,20 @@
77
//
88

99
import SwiftUI
10+
import UIKit
1011
import HXPhotoPicker
1112

13+
@available(iOS 14.0, *)
1214
struct ContentView: View {
13-
@State var config: PickerConfiguration = {
15+
@State var photoAssets: [PhotoAsset]
16+
@State var assets: [Asset]
17+
18+
init(photoAssets: [PhotoAsset], assets: [Asset]) {
19+
self.photoAssets = photoAssets
20+
self.assets = assets
21+
}
22+
23+
@State private var config: PickerConfiguration = {
1424
var config = PickerConfiguration.default
1525
config.photoList.bottomView.disableFinishButtonWhenNotSelected = false
1626
return config
@@ -20,22 +30,25 @@ struct ContentView: View {
2030
@State private var isShowingBrowser = false
2131
@State private var isShowingDelete = false
2232
@State private var pageIndex: Int = 0
23-
@State var photoAssets: [PhotoAsset]
24-
@State var assets: [Asset]
2533
@State private var draggedItem: Int = 0
2634

27-
var gridItemLayout = [
28-
GridItem(.flexible(), spacing: 12),
29-
GridItem(.flexible(), spacing: 12),
30-
GridItem(.flexible(), spacing: 12)
31-
]
35+
private var itemCount: CGFloat = UIDevice.isPad ? 5 : 3
36+
private var itemSpacing: CGFloat = 12
37+
private var gridItemLayout = {
38+
var items: [GridItem] = []
39+
let count = UIDevice.isPad ? 5 : 3
40+
for _ in 0..<count {
41+
items.append(.init(.flexible(), spacing: 12))
42+
}
43+
return items
44+
}()
3245

3346
var body: some View {
3447
GeometryReader { geometry in
3548
NavigationView {
3649
ScrollView {
37-
LazyVGrid(columns: gridItemLayout, spacing: 12) {
38-
let itemWidth = (geometry.size.width - 48) / 3
50+
LazyVGrid(columns: gridItemLayout, spacing: itemSpacing) {
51+
let itemWidth = (geometry.size.width - (itemSpacing * 2 + itemSpacing * (itemCount - 1))) / itemCount
3952
ForEach(0..<assets.count, id:\.self) { index in
4053
let asset = assets[index]
4154
Button {
@@ -78,10 +91,18 @@ struct ContentView: View {
7891
draggedItem = index
7992
return NSItemProvider(object: "\(index)" as NSString)
8093
}
81-
.onDrop(of: ["\(index)"], delegate: DragDropDelegate(fromIndex: $draggedItem, toIndex: index, itemSize: .init(width: itemWidth, height: itemWidth), photoAssets: $photoAssets, assets: $assets))
94+
.onDrop(
95+
of: ["\(index)"],
96+
delegate: DragDropDelegate(
97+
fromIndex: $draggedItem,
98+
toIndex: index,
99+
photoAssets: $photoAssets,
100+
assets: $assets
101+
)
102+
)
82103
}
83104
}
84-
.padding([.leading, .trailing], 12)
105+
.padding([.leading, .trailing], itemSpacing)
85106

86107
if config.maximumSelectedCount == 0 ||
87108
assets.count < config.maximumSelectedCount {
@@ -96,7 +117,7 @@ struct ContentView: View {
96117
.foregroundColor(Color(hex: 0x999999))
97118
.scaleEffect(2)
98119
}
99-
.padding([.leading, .trailing], 12)
120+
.padding([.leading, .trailing], itemSpacing)
100121
}
101122
}
102123
}
@@ -106,7 +127,7 @@ struct ContentView: View {
106127
}, label: {
107128
Text("设置")
108129
}))
109-
.padding([.leading, .trailing], 12)
130+
.padding([.leading, .trailing], itemSpacing)
110131
}
111132
.sheet(isPresented: $isShowingBrowser, content: {
112133
PhotoBrowser(pageIndex: pageIndex, photoAssets: $photoAssets, assets: $assets)
@@ -121,20 +142,15 @@ struct ContentView: View {
121142
.ignoresSafeArea()
122143
})
123144
}
145+
.navigationViewStyle(StackNavigationViewStyle())
124146
}
125147
}
126148
}
127149

128-
struct ContentView_Previews: PreviewProvider {
129-
static var previews: some View {
130-
ContentView(photoAssets: [], assets: [])
131-
}
132-
}
133-
150+
@available(iOS 14.0, *)
134151
struct DragDropDelegate: DropDelegate {
135152
@Binding var fromIndex: Int
136153
let toIndex: Int
137-
let itemSize: CGSize
138154
@Binding var photoAssets: [PhotoAsset]
139155
@Binding var assets: [Asset]
140156

@@ -157,6 +173,7 @@ struct DragDropDelegate: DropDelegate {
157173
}
158174
}
159175

176+
@available(iOS 14.0, *)
160177
extension Color {
161178
init(hex: UInt, alpha: Double = 1.0) {
162179
self.init(

SwiftUI/PhotoBrowser.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import SwiftUI
1010
import UIKit
1111
import HXPhotoPicker
1212

13+
@available(iOS 13.0, *)
1314
struct PhotoBrowser: UIViewControllerRepresentable {
1415

1516
var pageIndex: Int

SwiftUI/PhotoPickerView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import SwiftUI
1010
import UIKit
1111
import HXPhotoPicker
1212

13+
@available(iOS 13.0, *)
1314
struct PhotoPickerView: UIViewControllerRepresentable {
1415

1516
var config: PickerConfiguration

SwiftUI/PhotoView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import SwiftUI
1010
import HXPhotoPicker
1111

12+
@available(iOS 14.0, *)
1213
struct PhotoView: View {
1314

1415
var asset: Asset

0 commit comments

Comments
 (0)