zkit-ui 2.0.5 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryLayoutSupport.java → NativeImagePreviewLayoutSupport.java} +12 -12
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryMediaItem.java → NativeImagePreviewMediaItem.java} +2 -2
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewModule.kt +43 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryPagerAdapter.java → NativeImagePreviewPagerAdapter.java} +18 -18
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GallerySharedElementGeometry.java → NativeImagePreviewSharedElementGeometry.java} +2 -2
- package/android/src/main/java/cn/fontree/zkit/ui/preview/NativeImagePreviewSharedElementNames.java +39 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GallerySharedElementState.java → NativeImagePreviewSharedElementState.java} +4 -4
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GallerySourceViewRegistry.java → NativeImagePreviewSourceViewRegistry.java} +2 -2
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryTransitionSnapshotView.java → NativeImagePreviewTransitionSnapshotView.java} +3 -3
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryVideoPlayerView.java → NativeImagePreviewVideoPlayerView.java} +7 -7
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GaleriaView.kt → NativeImagePreviewView.kt} +18 -18
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryViewerOverlayView.java → NativeImagePreviewViewerOverlayView.java} +49 -49
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryViewerPageView.java → NativeImagePreviewViewerPageView.java} +27 -27
- package/android/src/main/java/cn/fontree/zkit/ui/preview/{GalleryViewerTransitionController.java → NativeImagePreviewViewerTransitionController.java} +22 -22
- package/dist/ui/Button/index.d.ts +1 -1
- package/dist/ui/Button/index.d.ts.map +1 -1
- package/dist/ui/Button/index.js +18 -3
- package/dist/ui/NativeImagePreview/NativeImagePreview.js +6 -6
- package/dist/ui/NativeImagePreview/NativeImagePreview.web.d.ts +1 -0
- package/dist/ui/NativeImagePreview/NativeImagePreview.web.d.ts.map +1 -1
- package/dist/ui/NativeImagePreview/NativeImagePreview.web.js +105 -11
- package/dist/ui/NativeImagePreview/context.d.ts +1 -1
- package/dist/ui/NativeImagePreview/context.d.ts.map +1 -1
- package/dist/ui/NativeImagePreview/types.d.ts +3 -1
- package/dist/ui/NativeImagePreview/types.d.ts.map +1 -1
- package/dist/ui/NativeImagePreview/utils.d.ts.map +1 -1
- package/dist/ui/NativeImagePreview/utils.js +1 -0
- package/dist/ui/NativeImagePreview/web/geometry.d.ts +20 -0
- package/dist/ui/NativeImagePreview/web/geometry.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/web/geometry.js +121 -0
- package/dist/ui/NativeImagePreview/web/media.d.ts +6 -0
- package/dist/ui/NativeImagePreview/web/media.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/web/media.js +90 -0
- package/dist/ui/NativeImagePreview/web/styles.css +137 -0
- package/dist/ui/NativeImagePreview/web/transition.d.ts +15 -0
- package/dist/ui/NativeImagePreview/web/transition.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/web/transition.js +77 -0
- package/dist/ui/NativeImagePreview/web/types.d.ts +74 -0
- package/dist/ui/NativeImagePreview/web/types.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/web/types.js +3 -0
- package/dist/ui/NativeImagePreview/web/viewer.d.ts +104 -0
- package/dist/ui/NativeImagePreview/web/viewer.d.ts.map +1 -0
- package/dist/ui/NativeImagePreview/web/viewer.js +894 -0
- package/expo-module.config.json +2 -2
- package/ios/{GalleryViewer/GaleriaImageLoader.swift → NativeImagePreview/NativeImagePreviewImageLoader.swift} +7 -7
- package/ios/NativeImagePreview/NativeImagePreviewImageViewInteraction.swift +245 -0
- package/ios/{GalleryViewer/GaleriaLayoutSupport.swift → NativeImagePreview/NativeImagePreviewLayoutSupport.swift} +19 -19
- package/ios/NativeImagePreview/NativeImagePreviewMedia.swift +28 -0
- package/ios/NativeImagePreview/NativeImagePreviewSourceViewRegistry.swift +80 -0
- package/ios/{GalleryViewer/GaleriaVideoPlayerView.swift → NativeImagePreview/NativeImagePreviewVideoPlayerView.swift} +1 -1
- package/ios/{GalleryViewer/GaleriaViewerConfiguration.swift → NativeImagePreview/NativeImagePreviewViewerConfiguration.swift} +7 -7
- package/ios/{GalleryViewer/GaleriaViewerController.swift → NativeImagePreview/NativeImagePreviewViewerController.swift} +36 -36
- package/ios/{GalleryViewer/GaleriaViewerPageView.swift → NativeImagePreview/NativeImagePreviewViewerPageView.swift} +33 -33
- package/ios/{GalleryViewer/GaleriaViewerTransitionCoordinator.swift → NativeImagePreview/NativeImagePreviewViewerTransitionCoordinator.swift} +16 -16
- package/ios/{GaleriaModule.swift → NativeImagePreviewModule.swift} +4 -4
- package/ios/{GaleriaView.swift → NativeImagePreviewView.swift} +26 -27
- package/package.json +18 -12
- package/src/services/ImagePreviewService/README.md +1 -1
- package/src/types.d.ts +1 -0
- package/src/ui/Button/README.md +1 -1
- package/src/ui/Button/index.tsx +27 -7
- package/src/ui/NativeImagePreview/NativeImagePreview.tsx +7 -7
- package/src/ui/NativeImagePreview/NativeImagePreview.web.tsx +175 -11
- package/src/ui/NativeImagePreview/README.md +3 -3
- package/src/ui/NativeImagePreview/context.tsx +1 -1
- package/src/ui/NativeImagePreview/types.ts +3 -1
- package/src/ui/NativeImagePreview/utils.ts +1 -0
- package/src/ui/NativeImagePreview/web/geometry.ts +134 -0
- package/src/ui/NativeImagePreview/web/media.ts +91 -0
- package/src/ui/NativeImagePreview/web/styles.css +137 -0
- package/src/ui/NativeImagePreview/web/transition.ts +111 -0
- package/src/ui/NativeImagePreview/web/types.ts +88 -0
- package/src/ui/NativeImagePreview/web/viewer.ts +1024 -0
- package/android/src/main/java/cn/fontree/zkit/ui/preview/GaleriaModule.kt +0 -43
- package/android/src/main/java/cn/fontree/zkit/ui/preview/GallerySharedElementNames.java +0 -39
- package/ios/GalleryViewer/GaleriaImageViewInteraction.swift +0 -245
- package/ios/GalleryViewer/GaleriaMedia.swift +0 -28
- package/ios/GalleryViewer/GaleriaSourceViewRegistry.swift +0 -80
- /package/android/src/main/res/layout/{galeria_player_view.xml → native_image_preview_player_view.xml} +0 -0
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
package cn.fontree.zkit.ui.preview
|
|
2
|
-
|
|
3
|
-
import expo.modules.kotlin.modules.Module
|
|
4
|
-
import expo.modules.kotlin.modules.ModuleDefinition
|
|
5
|
-
|
|
6
|
-
class GaleriaModule : Module() {
|
|
7
|
-
override fun definition() = ModuleDefinition {
|
|
8
|
-
Name("ZKitNativeImagePreview")
|
|
9
|
-
|
|
10
|
-
View(GaleriaView::class) {
|
|
11
|
-
Events(
|
|
12
|
-
"onIndexChange"
|
|
13
|
-
)
|
|
14
|
-
Prop("theme") { view: GaleriaView, theme: Theme ->
|
|
15
|
-
view.theme = theme
|
|
16
|
-
}
|
|
17
|
-
Prop("items") { view: GaleriaView, items: Array<Map<String, Any?>> ->
|
|
18
|
-
view.items = items.toList()
|
|
19
|
-
}
|
|
20
|
-
Prop("urls") { view: GaleriaView, urls: Array<String> ->
|
|
21
|
-
view.urls = urls
|
|
22
|
-
}
|
|
23
|
-
Prop("index") { view: GaleriaView, index: Int ->
|
|
24
|
-
view.initialIndex = index
|
|
25
|
-
}
|
|
26
|
-
Prop("galleryId") { view: GaleriaView, galleryId: String? ->
|
|
27
|
-
view.galleryId = galleryId
|
|
28
|
-
}
|
|
29
|
-
Prop("disableHiddenOriginalImage") { view: GaleriaView, disableHiddenOriginalImage: Boolean ->
|
|
30
|
-
view.disableHiddenOriginalImage = disableHiddenOriginalImage
|
|
31
|
-
}
|
|
32
|
-
Prop("edgeToEdge") { view: GaleriaView, edgeToEdge: Boolean ->
|
|
33
|
-
view.edgeToEdge = edgeToEdge
|
|
34
|
-
}
|
|
35
|
-
Prop("transitionOffsetY") { view: GaleriaView, transitionOffsetY: Int? ->
|
|
36
|
-
view.transitionOffsetY = transitionOffsetY
|
|
37
|
-
}
|
|
38
|
-
Prop("transitionOffsetX") { view: GaleriaView, transitionOffsetX: Int? ->
|
|
39
|
-
view.transitionOffsetX = transitionOffsetX
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
package cn.fontree.zkit.ui.preview;
|
|
2
|
-
|
|
3
|
-
import androidx.annotation.NonNull;
|
|
4
|
-
import androidx.annotation.Nullable;
|
|
5
|
-
|
|
6
|
-
public final class GallerySharedElementNames {
|
|
7
|
-
private static final String PREFIX = "zkit-native-image-preview:media:";
|
|
8
|
-
|
|
9
|
-
private GallerySharedElementNames() {
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
@NonNull
|
|
13
|
-
public static String forItem(@NonNull GalleryMediaItem item) {
|
|
14
|
-
return forItem(null, item);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
@NonNull
|
|
18
|
-
public static String forItem(@Nullable String galleryId, @NonNull GalleryMediaItem item) {
|
|
19
|
-
return forId(galleryId, item.getId());
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
@NonNull
|
|
23
|
-
public static String forIndex(int index) {
|
|
24
|
-
return forIndex(null, index);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@NonNull
|
|
28
|
-
public static String forIndex(@Nullable String galleryId, int index) {
|
|
29
|
-
return forId(galleryId, String.valueOf(index));
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@NonNull
|
|
33
|
-
private static String forId(@Nullable String galleryId, @NonNull String id) {
|
|
34
|
-
if (galleryId == null || galleryId.isEmpty()) {
|
|
35
|
-
return PREFIX + id;
|
|
36
|
-
}
|
|
37
|
-
return PREFIX + galleryId + ":" + id;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
import ObjectiveC
|
|
2
|
-
import UIKit
|
|
3
|
-
|
|
4
|
-
extension UIImageView {
|
|
5
|
-
private struct GaleriaAnchorRegistration {
|
|
6
|
-
let galleryId: String
|
|
7
|
-
let index: Int
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
private final class GaleriaTapGestureRecognizer: UITapGestureRecognizer {
|
|
11
|
-
weak var fromViewController: UIViewController?
|
|
12
|
-
var dataSource: GaleriaDataSource?
|
|
13
|
-
var imageLoader: GaleriaImageLoading?
|
|
14
|
-
var initialIndex = 0
|
|
15
|
-
var galleryId: String?
|
|
16
|
-
var configuration = GaleriaViewerConfiguration()
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
private static var anchorRegistrationKey: UInt8 = 0
|
|
20
|
-
private static var gestureRecognizerKey: UInt8 = 0
|
|
21
|
-
|
|
22
|
-
private var topMostHostViewController: UIViewController? {
|
|
23
|
-
let keyWindow: UIWindow? = {
|
|
24
|
-
if #available(iOS 13.0, *) {
|
|
25
|
-
let scenes = UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }
|
|
26
|
-
let activeScene = scenes.first(where: { $0.activationState == .foregroundActive }) ?? scenes.first
|
|
27
|
-
return activeScene?.windows.first(where: { $0.isKeyWindow }) ?? activeScene?.windows.first
|
|
28
|
-
} else {
|
|
29
|
-
return UIApplication.shared.windows.first(where: { $0.isKeyWindow }) ?? UIApplication.shared.windows.first
|
|
30
|
-
}
|
|
31
|
-
}()
|
|
32
|
-
guard let rootViewController = keyWindow?.rootViewController else { return nil }
|
|
33
|
-
return rootViewController.presentedViewController ?? rootViewController
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
public func setupGaleriaViewer(
|
|
37
|
-
configuration: GaleriaViewerConfiguration = GaleriaViewerConfiguration(),
|
|
38
|
-
from viewController: UIViewController? = nil,
|
|
39
|
-
imageLoader: GaleriaImageLoading? = nil,
|
|
40
|
-
galleryId: String? = nil
|
|
41
|
-
) {
|
|
42
|
-
configureGaleriaViewer(
|
|
43
|
-
dataSource: GaleriaArrayDataSource(items: [.image(image)]),
|
|
44
|
-
initialIndex: 0,
|
|
45
|
-
configuration: configuration,
|
|
46
|
-
from: viewController,
|
|
47
|
-
imageLoader: imageLoader,
|
|
48
|
-
galleryId: galleryId
|
|
49
|
-
)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
public func setupGaleriaViewer(
|
|
53
|
-
url: URL,
|
|
54
|
-
initialIndex: Int = 0,
|
|
55
|
-
placeholder: UIImage? = nil,
|
|
56
|
-
configuration: GaleriaViewerConfiguration = GaleriaViewerConfiguration(),
|
|
57
|
-
from viewController: UIViewController? = nil,
|
|
58
|
-
imageLoader: GaleriaImageLoading? = nil,
|
|
59
|
-
galleryId: String? = nil
|
|
60
|
-
) {
|
|
61
|
-
configureGaleriaViewer(
|
|
62
|
-
dataSource: GaleriaArrayDataSource(items: [.imageURL(url, placeholder: placeholder)]),
|
|
63
|
-
initialIndex: initialIndex,
|
|
64
|
-
configuration: configuration,
|
|
65
|
-
from: viewController,
|
|
66
|
-
imageLoader: imageLoader,
|
|
67
|
-
galleryId: galleryId
|
|
68
|
-
)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public func setupGaleriaViewer(
|
|
72
|
-
images: [UIImage],
|
|
73
|
-
initialIndex: Int = 0,
|
|
74
|
-
configuration: GaleriaViewerConfiguration = GaleriaViewerConfiguration(),
|
|
75
|
-
from viewController: UIViewController? = nil,
|
|
76
|
-
imageLoader: GaleriaImageLoading? = nil,
|
|
77
|
-
galleryId: String? = nil
|
|
78
|
-
) {
|
|
79
|
-
let items = images.map { GaleriaMediaItem.image($0) }
|
|
80
|
-
configureGaleriaViewer(
|
|
81
|
-
dataSource: GaleriaArrayDataSource(items: items),
|
|
82
|
-
initialIndex: initialIndex,
|
|
83
|
-
configuration: configuration,
|
|
84
|
-
from: viewController,
|
|
85
|
-
imageLoader: imageLoader,
|
|
86
|
-
galleryId: galleryId
|
|
87
|
-
)
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
public func setupGaleriaViewer(
|
|
91
|
-
urls: [URL],
|
|
92
|
-
initialIndex: Int = 0,
|
|
93
|
-
placeholder: UIImage? = nil,
|
|
94
|
-
configuration: GaleriaViewerConfiguration = GaleriaViewerConfiguration(),
|
|
95
|
-
from viewController: UIViewController? = nil,
|
|
96
|
-
imageLoader: GaleriaImageLoading? = nil,
|
|
97
|
-
galleryId: String? = nil
|
|
98
|
-
) {
|
|
99
|
-
let items = urls.map { GaleriaMediaItem.imageURL($0, placeholder: placeholder) }
|
|
100
|
-
configureGaleriaViewer(
|
|
101
|
-
dataSource: GaleriaArrayDataSource(items: items),
|
|
102
|
-
initialIndex: initialIndex,
|
|
103
|
-
configuration: configuration,
|
|
104
|
-
from: viewController,
|
|
105
|
-
imageLoader: imageLoader,
|
|
106
|
-
galleryId: galleryId
|
|
107
|
-
)
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
public func setupGaleriaViewer(
|
|
111
|
-
dataSource: GaleriaDataSource,
|
|
112
|
-
initialIndex: Int = 0,
|
|
113
|
-
configuration: GaleriaViewerConfiguration = GaleriaViewerConfiguration(),
|
|
114
|
-
from viewController: UIViewController? = nil,
|
|
115
|
-
imageLoader: GaleriaImageLoading? = nil,
|
|
116
|
-
galleryId: String? = nil
|
|
117
|
-
) {
|
|
118
|
-
configureGaleriaViewer(
|
|
119
|
-
dataSource: dataSource,
|
|
120
|
-
initialIndex: initialIndex,
|
|
121
|
-
configuration: configuration,
|
|
122
|
-
from: viewController,
|
|
123
|
-
imageLoader: imageLoader,
|
|
124
|
-
galleryId: galleryId
|
|
125
|
-
)
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
func removeGaleriaViewerInteraction() {
|
|
129
|
-
if let recognizer = galeriaTapGestureRecognizer {
|
|
130
|
-
removeGestureRecognizer(recognizer)
|
|
131
|
-
}
|
|
132
|
-
galeriaTapGestureRecognizer = nil
|
|
133
|
-
|
|
134
|
-
if let registration = galeriaAnchorRegistration {
|
|
135
|
-
GaleriaSourceViewRegistry.shared.unregister(
|
|
136
|
-
self,
|
|
137
|
-
galleryId: registration.galleryId,
|
|
138
|
-
index: registration.index
|
|
139
|
-
)
|
|
140
|
-
}
|
|
141
|
-
galeriaAnchorRegistration = nil
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
private func configureGaleriaViewer(
|
|
145
|
-
dataSource: GaleriaDataSource?,
|
|
146
|
-
initialIndex: Int,
|
|
147
|
-
configuration: GaleriaViewerConfiguration,
|
|
148
|
-
from viewController: UIViewController?,
|
|
149
|
-
imageLoader: GaleriaImageLoading?,
|
|
150
|
-
galleryId: String?
|
|
151
|
-
) {
|
|
152
|
-
let recognizer = galeriaTapGestureRecognizer ?? {
|
|
153
|
-
let recognizer = GaleriaTapGestureRecognizer(target: self, action: #selector(showGaleriaViewer(_:)))
|
|
154
|
-
recognizer.numberOfTouchesRequired = 1
|
|
155
|
-
recognizer.numberOfTapsRequired = 1
|
|
156
|
-
galeriaTapGestureRecognizer = recognizer
|
|
157
|
-
return recognizer
|
|
158
|
-
}()
|
|
159
|
-
|
|
160
|
-
isUserInteractionEnabled = true
|
|
161
|
-
clipsToBounds = true
|
|
162
|
-
|
|
163
|
-
recognizer.dataSource = dataSource
|
|
164
|
-
recognizer.imageLoader = imageLoader
|
|
165
|
-
recognizer.initialIndex = initialIndex
|
|
166
|
-
recognizer.galleryId = galleryId
|
|
167
|
-
recognizer.configuration = configuration
|
|
168
|
-
recognizer.fromViewController = viewController
|
|
169
|
-
|
|
170
|
-
if recognizer.view !== self {
|
|
171
|
-
addGestureRecognizer(recognizer)
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
updateGaleriaAnchorRegistration(galleryId: galleryId, index: initialIndex)
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
private var galeriaTapGestureRecognizer: GaleriaTapGestureRecognizer? {
|
|
178
|
-
get {
|
|
179
|
-
objc_getAssociatedObject(self, &Self.gestureRecognizerKey) as? GaleriaTapGestureRecognizer
|
|
180
|
-
}
|
|
181
|
-
set {
|
|
182
|
-
objc_setAssociatedObject(
|
|
183
|
-
self,
|
|
184
|
-
&Self.gestureRecognizerKey,
|
|
185
|
-
newValue,
|
|
186
|
-
.OBJC_ASSOCIATION_RETAIN_NONATOMIC
|
|
187
|
-
)
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
private var galeriaAnchorRegistration: GaleriaAnchorRegistration? {
|
|
192
|
-
get {
|
|
193
|
-
objc_getAssociatedObject(self, &Self.anchorRegistrationKey) as? GaleriaAnchorRegistration
|
|
194
|
-
}
|
|
195
|
-
set {
|
|
196
|
-
objc_setAssociatedObject(
|
|
197
|
-
self,
|
|
198
|
-
&Self.anchorRegistrationKey,
|
|
199
|
-
newValue,
|
|
200
|
-
.OBJC_ASSOCIATION_RETAIN_NONATOMIC
|
|
201
|
-
)
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
@objc
|
|
206
|
-
private func showGaleriaViewer(_ recognizer: GaleriaTapGestureRecognizer) {
|
|
207
|
-
guard let sourceView = recognizer.view as? UIImageView else { return }
|
|
208
|
-
let resolvedImageLoader = recognizer.imageLoader ?? GaleriaImageLoaderFactory.makeDefault()
|
|
209
|
-
let viewerController = GaleriaViewerController(
|
|
210
|
-
sourceView: sourceView,
|
|
211
|
-
dataSource: recognizer.dataSource,
|
|
212
|
-
imageLoader: resolvedImageLoader,
|
|
213
|
-
configuration: recognizer.configuration,
|
|
214
|
-
initialIndex: recognizer.initialIndex,
|
|
215
|
-
galleryId: recognizer.galleryId
|
|
216
|
-
)
|
|
217
|
-
|
|
218
|
-
let rootViewController = recognizer.fromViewController ?? topMostHostViewController
|
|
219
|
-
let presenter = rootViewController.flatMap(topMostPresentedController(from:))
|
|
220
|
-
presenter?.present(viewerController, animated: false)
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
private func topMostPresentedController(from rootViewController: UIViewController) -> UIViewController {
|
|
224
|
-
var controller = rootViewController
|
|
225
|
-
while let presented = controller.presentedViewController {
|
|
226
|
-
controller = presented
|
|
227
|
-
}
|
|
228
|
-
return controller
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
private func updateGaleriaAnchorRegistration(galleryId: String?, index: Int) {
|
|
232
|
-
if let existing = galeriaAnchorRegistration {
|
|
233
|
-
GaleriaSourceViewRegistry.shared.unregister(
|
|
234
|
-
self,
|
|
235
|
-
galleryId: existing.galleryId,
|
|
236
|
-
index: existing.index
|
|
237
|
-
)
|
|
238
|
-
galeriaAnchorRegistration = nil
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
guard let galleryId = galleryId, galleryId.isEmpty == false else { return }
|
|
242
|
-
GaleriaSourceViewRegistry.shared.register(self, galleryId: galleryId, index: index)
|
|
243
|
-
galeriaAnchorRegistration = GaleriaAnchorRegistration(galleryId: galleryId, index: index)
|
|
244
|
-
}
|
|
245
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import UIKit
|
|
2
|
-
|
|
3
|
-
public enum GaleriaMediaItem {
|
|
4
|
-
case image(UIImage?)
|
|
5
|
-
case imageURL(URL, placeholder: UIImage?)
|
|
6
|
-
case video(url: URL, poster: URL?)
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
public protocol GaleriaDataSource: AnyObject {
|
|
10
|
-
func numberOfItems() -> Int
|
|
11
|
-
func item(at index: Int) -> GaleriaMediaItem
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
public final class GaleriaArrayDataSource: GaleriaDataSource {
|
|
15
|
-
private let items: [GaleriaMediaItem]
|
|
16
|
-
|
|
17
|
-
public init(items: [GaleriaMediaItem]) {
|
|
18
|
-
self.items = items
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
public func numberOfItems() -> Int {
|
|
22
|
-
items.count
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
public func item(at index: Int) -> GaleriaMediaItem {
|
|
26
|
-
items[index]
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import UIKit
|
|
2
|
-
|
|
3
|
-
final class GaleriaSourceViewRegistry {
|
|
4
|
-
static let shared = GaleriaSourceViewRegistry()
|
|
5
|
-
|
|
6
|
-
private final class WeakImageView {
|
|
7
|
-
weak var value: UIImageView?
|
|
8
|
-
|
|
9
|
-
init(_ value: UIImageView) {
|
|
10
|
-
self.value = value
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
private var anchors: [String: [Int: WeakImageView]] = [:]
|
|
15
|
-
|
|
16
|
-
private init() {}
|
|
17
|
-
|
|
18
|
-
func register(_ imageView: UIImageView, galleryId: String, index: Int) {
|
|
19
|
-
cleanup()
|
|
20
|
-
var galleryAnchors = anchors[galleryId] ?? [:]
|
|
21
|
-
galleryAnchors[index] = WeakImageView(imageView)
|
|
22
|
-
anchors[galleryId] = galleryAnchors
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
func unregister(_ imageView: UIImageView, galleryId: String?, index: Int?) {
|
|
26
|
-
cleanup()
|
|
27
|
-
if let galleryId = galleryId {
|
|
28
|
-
remove(imageView, from: galleryId, index: index)
|
|
29
|
-
} else {
|
|
30
|
-
for galleryId in Array(anchors.keys) {
|
|
31
|
-
remove(imageView, from: galleryId, index: nil)
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
cleanup()
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
func sourceView(for galleryId: String, index: Int) -> UIImageView? {
|
|
38
|
-
cleanup()
|
|
39
|
-
guard
|
|
40
|
-
let imageView = anchors[galleryId]?[index]?.value,
|
|
41
|
-
let window = imageView.window,
|
|
42
|
-
!imageView.isHidden
|
|
43
|
-
else {
|
|
44
|
-
return nil
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
let frameInWindow = imageView.frameInWindow()
|
|
48
|
-
guard !frameInWindow.isEmpty, frameInWindow.intersects(window.bounds) else {
|
|
49
|
-
return nil
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
return imageView
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
private func remove(_ imageView: UIImageView, from galleryId: String, index: Int?) {
|
|
56
|
-
guard var galleryAnchors = anchors[galleryId] else { return }
|
|
57
|
-
|
|
58
|
-
if let index = index {
|
|
59
|
-
if let registeredView = galleryAnchors[index]?.value, registeredView === imageView {
|
|
60
|
-
galleryAnchors.removeValue(forKey: index)
|
|
61
|
-
}
|
|
62
|
-
} else {
|
|
63
|
-
galleryAnchors = galleryAnchors.filter { _, weakImageView in
|
|
64
|
-
guard let registeredView = weakImageView.value else { return false }
|
|
65
|
-
return registeredView !== imageView
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
anchors[galleryId] = galleryAnchors.isEmpty ? nil : galleryAnchors
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
private func cleanup() {
|
|
73
|
-
anchors = anchors.compactMapValues { galleryAnchors in
|
|
74
|
-
let activeAnchors = galleryAnchors.filter { _, weakImageView in
|
|
75
|
-
weakImageView.value != nil
|
|
76
|
-
}
|
|
77
|
-
return activeAnchors.isEmpty ? nil : activeAnchors
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
File without changes
|