77//
88
99import SwiftUI
10+ import UIKit
1011import HXPhotoPicker
1112
13+ @available ( iOS 14 . 0 , * )
1214struct 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 , * )
134151struct 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 , * )
160177extension Color {
161178 init ( hex: UInt , alpha: Double = 1.0 ) {
162179 self . init (
0 commit comments