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,12 +1,12 @@
|
|
|
1
1
|
import UIKit
|
|
2
2
|
|
|
3
|
-
final class
|
|
4
|
-
private weak var dataSource:
|
|
3
|
+
final class NativeImagePreviewViewerController: UIViewController {
|
|
4
|
+
private weak var dataSource: NativeImagePreviewDataSource?
|
|
5
5
|
private weak var initialSourceView: UIImageView?
|
|
6
|
-
private let imageLoader:
|
|
7
|
-
private let
|
|
6
|
+
private let imageLoader: NativeImagePreviewImageLoading
|
|
7
|
+
private let previewGroupId: String?
|
|
8
8
|
private let initialIndex: Int
|
|
9
|
-
private let configuration:
|
|
9
|
+
private let configuration: NativeImagePreviewViewerConfiguration
|
|
10
10
|
|
|
11
11
|
private let backgroundView = UIView()
|
|
12
12
|
private let contentView = UIView()
|
|
@@ -14,7 +14,7 @@ final class GaleriaViewerController: UIViewController {
|
|
|
14
14
|
private let navigationBar = UINavigationBar(frame: .zero)
|
|
15
15
|
private let navigationItemRef = UINavigationItem()
|
|
16
16
|
|
|
17
|
-
private var transitionCoordinatorRef:
|
|
17
|
+
private var transitionCoordinatorRef: NativeImagePreviewViewerTransitionCoordinator?
|
|
18
18
|
private var hasPerformedOpenTransition = false
|
|
19
19
|
private var pendingDismissal = false
|
|
20
20
|
private var pendingInitialScroll = false
|
|
@@ -33,7 +33,7 @@ final class GaleriaViewerController: UIViewController {
|
|
|
33
33
|
private var isDraggingToDismiss = false
|
|
34
34
|
private var dragStartPoint = CGPoint.zero
|
|
35
35
|
private var dragTargetView: UIView?
|
|
36
|
-
private weak var dragPageView:
|
|
36
|
+
private weak var dragPageView: NativeImagePreviewViewerPageView?
|
|
37
37
|
private weak var hiddenActiveSourceView: UIImageView?
|
|
38
38
|
private var hiddenActiveSourcePreviousAlpha: CGFloat = 1
|
|
39
39
|
|
|
@@ -70,18 +70,18 @@ final class GaleriaViewerController: UIViewController {
|
|
|
70
70
|
|
|
71
71
|
init(
|
|
72
72
|
sourceView: UIImageView,
|
|
73
|
-
dataSource:
|
|
74
|
-
imageLoader:
|
|
75
|
-
configuration:
|
|
73
|
+
dataSource: NativeImagePreviewDataSource?,
|
|
74
|
+
imageLoader: NativeImagePreviewImageLoading,
|
|
75
|
+
configuration: NativeImagePreviewViewerConfiguration = NativeImagePreviewViewerConfiguration(),
|
|
76
76
|
initialIndex: Int = 0,
|
|
77
|
-
|
|
77
|
+
previewGroupId: String? = nil
|
|
78
78
|
) {
|
|
79
79
|
self.initialSourceView = sourceView
|
|
80
80
|
self.dataSource = dataSource
|
|
81
81
|
self.imageLoader = imageLoader
|
|
82
82
|
self.configuration = configuration
|
|
83
83
|
self.initialIndex = initialIndex
|
|
84
|
-
self.
|
|
84
|
+
self.previewGroupId = previewGroupId
|
|
85
85
|
|
|
86
86
|
let layout = UICollectionViewFlowLayout()
|
|
87
87
|
layout.scrollDirection = .horizontal
|
|
@@ -130,7 +130,7 @@ final class GaleriaViewerController: UIViewController {
|
|
|
130
130
|
if hasPerformedOpenTransition == false {
|
|
131
131
|
hasPerformedOpenTransition = true
|
|
132
132
|
scrollToIndex(currentIndex, animated: false)
|
|
133
|
-
transitionCoordinatorRef =
|
|
133
|
+
transitionCoordinatorRef = NativeImagePreviewViewerTransitionCoordinator(containerView: view)
|
|
134
134
|
performOpenTransition()
|
|
135
135
|
}
|
|
136
136
|
}
|
|
@@ -147,7 +147,7 @@ final class GaleriaViewerController: UIViewController {
|
|
|
147
147
|
restoreHiddenActiveSourceView()
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
private var currentPageView:
|
|
150
|
+
private var currentPageView: NativeImagePreviewViewerPageView? {
|
|
151
151
|
pageView(at: currentIndex)
|
|
152
152
|
}
|
|
153
153
|
|
|
@@ -182,7 +182,7 @@ final class GaleriaViewerController: UIViewController {
|
|
|
182
182
|
collectionView.contentInsetAdjustmentBehavior = .never
|
|
183
183
|
collectionView.delegate = self
|
|
184
184
|
collectionView.dataSource = self
|
|
185
|
-
collectionView.register(
|
|
185
|
+
collectionView.register(NativeImagePreviewViewerPageCell.self, forCellWithReuseIdentifier: NativeImagePreviewViewerPageCell.reuseIdentifier)
|
|
186
186
|
contentView.addSubview(collectionView)
|
|
187
187
|
collectionView.pinToSuperviewEdges()
|
|
188
188
|
collectionView.addGestureRecognizer(panGestureRecognizer)
|
|
@@ -267,8 +267,8 @@ final class GaleriaViewerController: UIViewController {
|
|
|
267
267
|
}
|
|
268
268
|
|
|
269
269
|
private func anchorView(for index: Int) -> UIImageView? {
|
|
270
|
-
if let
|
|
271
|
-
let sourceView =
|
|
270
|
+
if let previewGroupId = previewGroupId,
|
|
271
|
+
let sourceView = NativeImagePreviewSourceViewRegistry.shared.sourceView(for: previewGroupId, index: index) {
|
|
272
272
|
return sourceView
|
|
273
273
|
}
|
|
274
274
|
if index == initialIndex {
|
|
@@ -283,9 +283,9 @@ final class GaleriaViewerController: UIViewController {
|
|
|
283
283
|
return min(max(index, 0), count - 1)
|
|
284
284
|
}
|
|
285
285
|
|
|
286
|
-
private func pageView(at index: Int) ->
|
|
286
|
+
private func pageView(at index: Int) -> NativeImagePreviewViewerPageView? {
|
|
287
287
|
let indexPath = IndexPath(item: index, section: 0)
|
|
288
|
-
return collectionView.cellForItem(at: indexPath).flatMap { $0 as?
|
|
288
|
+
return collectionView.cellForItem(at: indexPath).flatMap { $0 as? NativeImagePreviewViewerPageCell }?.pageView
|
|
289
289
|
}
|
|
290
290
|
|
|
291
291
|
private func hideActiveSourceViewForCurrentIndex() {
|
|
@@ -342,7 +342,7 @@ final class GaleriaViewerController: UIViewController {
|
|
|
342
342
|
|
|
343
343
|
private func updateVisiblePageStates() {
|
|
344
344
|
for cell in collectionView.visibleCells {
|
|
345
|
-
guard let pageCell = cell as?
|
|
345
|
+
guard let pageCell = cell as? NativeImagePreviewViewerPageCell else { continue }
|
|
346
346
|
let index = collectionView.indexPath(for: pageCell)?.item ?? -1
|
|
347
347
|
pageCell.pageView.setActive(index == currentIndex)
|
|
348
348
|
pageCell.pageView.setVideoRevealAllowed(index == currentIndex && hasPerformedOpenTransition)
|
|
@@ -357,7 +357,7 @@ final class GaleriaViewerController: UIViewController {
|
|
|
357
357
|
|
|
358
358
|
private func setVideoRevealAllowedForVisiblePages(_ allowed: Bool) {
|
|
359
359
|
for cell in collectionView.visibleCells {
|
|
360
|
-
guard let pageCell = cell as?
|
|
360
|
+
guard let pageCell = cell as? NativeImagePreviewViewerPageCell else { continue }
|
|
361
361
|
let index = collectionView.indexPath(for: pageCell)?.item ?? -1
|
|
362
362
|
pageCell.pageView.setVideoRevealAllowed(allowed && index == currentIndex)
|
|
363
363
|
}
|
|
@@ -599,7 +599,7 @@ final class GaleriaViewerController: UIViewController {
|
|
|
599
599
|
}
|
|
600
600
|
}
|
|
601
601
|
|
|
602
|
-
extension
|
|
602
|
+
extension NativeImagePreviewViewerController: UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
|
|
603
603
|
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
|
604
604
|
pageCount = dataSource?.numberOfItems() ?? 0
|
|
605
605
|
return pageCount
|
|
@@ -607,9 +607,9 @@ extension GaleriaViewerController: UICollectionViewDataSource, UICollectionViewD
|
|
|
607
607
|
|
|
608
608
|
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
|
609
609
|
guard let cell = collectionView.dequeueReusableCell(
|
|
610
|
-
withReuseIdentifier:
|
|
610
|
+
withReuseIdentifier: NativeImagePreviewViewerPageCell.reuseIdentifier,
|
|
611
611
|
for: indexPath
|
|
612
|
-
) as?
|
|
612
|
+
) as? NativeImagePreviewViewerPageCell else {
|
|
613
613
|
return UICollectionViewCell()
|
|
614
614
|
}
|
|
615
615
|
|
|
@@ -630,13 +630,13 @@ extension GaleriaViewerController: UICollectionViewDataSource, UICollectionViewD
|
|
|
630
630
|
}
|
|
631
631
|
|
|
632
632
|
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
|
|
633
|
-
guard let pageCell = cell as?
|
|
633
|
+
guard let pageCell = cell as? NativeImagePreviewViewerPageCell else { return }
|
|
634
634
|
pageCell.pageView.setActive(indexPath.item == currentIndex)
|
|
635
635
|
pageCell.pageView.setVideoRevealAllowed(hasPerformedOpenTransition && indexPath.item == currentIndex)
|
|
636
636
|
}
|
|
637
637
|
|
|
638
638
|
func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
|
|
639
|
-
guard let pageCell = cell as?
|
|
639
|
+
guard let pageCell = cell as? NativeImagePreviewViewerPageCell else { return }
|
|
640
640
|
pageCell.pageView.setActive(false)
|
|
641
641
|
pageCell.pageView.setVideoRevealAllowed(false)
|
|
642
642
|
}
|
|
@@ -656,7 +656,7 @@ extension GaleriaViewerController: UICollectionViewDataSource, UICollectionViewD
|
|
|
656
656
|
}
|
|
657
657
|
}
|
|
658
658
|
|
|
659
|
-
extension
|
|
659
|
+
extension NativeImagePreviewViewerController: UIGestureRecognizerDelegate {
|
|
660
660
|
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
|
|
661
661
|
if gestureRecognizer === panGestureRecognizer {
|
|
662
662
|
recalculateHorizontalPagingEnabled()
|
|
@@ -681,24 +681,24 @@ extension GaleriaViewerController: UIGestureRecognizerDelegate {
|
|
|
681
681
|
}
|
|
682
682
|
}
|
|
683
683
|
|
|
684
|
-
extension
|
|
685
|
-
func
|
|
684
|
+
extension NativeImagePreviewViewerController: NativeImagePreviewViewerPageViewDelegate {
|
|
685
|
+
func nativeImagePreviewViewerPageViewDidRequestDismiss(_ pageView: NativeImagePreviewViewerPageView) {
|
|
686
686
|
guard pageView.index == currentIndex else { return }
|
|
687
687
|
performDismissTransition()
|
|
688
688
|
}
|
|
689
689
|
|
|
690
|
-
func
|
|
690
|
+
func nativeImagePreviewViewerPageViewDidToggleVideoChrome(_ pageView: NativeImagePreviewViewerPageView) {
|
|
691
691
|
guard pageView.index == currentIndex else { return }
|
|
692
692
|
_ = pageView.toggleVideoControls()
|
|
693
693
|
setNavigationBarHidden(shouldHideNavigationBarForCurrentPage, animated: true)
|
|
694
694
|
}
|
|
695
695
|
|
|
696
|
-
func
|
|
696
|
+
func nativeImagePreviewViewerPageView(_ pageView: NativeImagePreviewViewerPageView, setHorizontalPagingEnabled enabled: Bool) {
|
|
697
697
|
guard pageView.index == currentIndex else { return }
|
|
698
698
|
recalculateHorizontalPagingEnabled()
|
|
699
699
|
}
|
|
700
700
|
|
|
701
|
-
func
|
|
701
|
+
func nativeImagePreviewViewerPageViewDidBeginMultiTouch(_ pageView: NativeImagePreviewViewerPageView) {
|
|
702
702
|
guard pageView.index == currentIndex else { return }
|
|
703
703
|
verticalDismissLocked = true
|
|
704
704
|
verticalDismissNeedsReanchor = false
|
|
@@ -708,7 +708,7 @@ extension GaleriaViewerController: GaleriaViewerPageViewDelegate {
|
|
|
708
708
|
recalculateHorizontalPagingEnabled()
|
|
709
709
|
}
|
|
710
710
|
|
|
711
|
-
func
|
|
711
|
+
func nativeImagePreviewViewerPageViewDidEndMultiTouch(_ pageView: NativeImagePreviewViewerPageView) {
|
|
712
712
|
guard pageView.index == currentIndex else { return }
|
|
713
713
|
verticalDismissLocked = false
|
|
714
714
|
verticalDismissNeedsReanchor = true
|
|
@@ -716,10 +716,10 @@ extension GaleriaViewerController: GaleriaViewerPageViewDelegate {
|
|
|
716
716
|
}
|
|
717
717
|
}
|
|
718
718
|
|
|
719
|
-
private final class
|
|
720
|
-
static let reuseIdentifier = "
|
|
719
|
+
private final class NativeImagePreviewViewerPageCell: UICollectionViewCell {
|
|
720
|
+
static let reuseIdentifier = "NativeImagePreviewViewerPageCell"
|
|
721
721
|
|
|
722
|
-
let pageView =
|
|
722
|
+
let pageView = NativeImagePreviewViewerPageView()
|
|
723
723
|
|
|
724
724
|
override init(frame: CGRect) {
|
|
725
725
|
super.init(frame: frame)
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import UIKit
|
|
2
2
|
|
|
3
|
-
protocol
|
|
4
|
-
func
|
|
5
|
-
func
|
|
6
|
-
func
|
|
7
|
-
func
|
|
8
|
-
func
|
|
3
|
+
protocol NativeImagePreviewViewerPageViewDelegate: AnyObject {
|
|
4
|
+
func nativeImagePreviewViewerPageViewDidRequestDismiss(_ pageView: NativeImagePreviewViewerPageView)
|
|
5
|
+
func nativeImagePreviewViewerPageViewDidToggleVideoChrome(_ pageView: NativeImagePreviewViewerPageView)
|
|
6
|
+
func nativeImagePreviewViewerPageView(_ pageView: NativeImagePreviewViewerPageView, setHorizontalPagingEnabled enabled: Bool)
|
|
7
|
+
func nativeImagePreviewViewerPageViewDidBeginMultiTouch(_ pageView: NativeImagePreviewViewerPageView)
|
|
8
|
+
func nativeImagePreviewViewerPageViewDidEndMultiTouch(_ pageView: NativeImagePreviewViewerPageView)
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
final class
|
|
12
|
-
weak var delegate:
|
|
11
|
+
final class NativeImagePreviewViewerPageView: UIView {
|
|
12
|
+
weak var delegate: NativeImagePreviewViewerPageViewDelegate?
|
|
13
13
|
|
|
14
14
|
private(set) var index: Int = 0
|
|
15
|
-
private(set) var item:
|
|
15
|
+
private(set) var item: NativeImagePreviewMediaItem?
|
|
16
16
|
|
|
17
17
|
private let mediaContainer = UIView()
|
|
18
18
|
private let activityIndicator = UIActivityIndicatorView(style: .large)
|
|
@@ -23,9 +23,9 @@ final class GaleriaViewerPageView: UIView {
|
|
|
23
23
|
|
|
24
24
|
private let videoContainer = UIView()
|
|
25
25
|
private let posterImageView = UIImageView()
|
|
26
|
-
private let videoPlayerView =
|
|
26
|
+
private let videoPlayerView = NativeImagePreviewVideoPlayerView(frame: .zero)
|
|
27
27
|
|
|
28
|
-
private var imageLoader:
|
|
28
|
+
private var imageLoader: NativeImagePreviewImageLoading?
|
|
29
29
|
private var mediaContentMode: UIView.ContentMode = .scaleAspectFit
|
|
30
30
|
private var loadGeneration = 0
|
|
31
31
|
|
|
@@ -104,8 +104,8 @@ final class GaleriaViewerPageView: UIView {
|
|
|
104
104
|
|
|
105
105
|
func configure(
|
|
106
106
|
index: Int,
|
|
107
|
-
item:
|
|
108
|
-
imageLoader:
|
|
107
|
+
item: NativeImagePreviewMediaItem,
|
|
108
|
+
imageLoader: NativeImagePreviewImageLoading,
|
|
109
109
|
mediaContentMode: UIView.ContentMode,
|
|
110
110
|
sourcePreviewImage: UIImage? = nil
|
|
111
111
|
) {
|
|
@@ -222,20 +222,20 @@ final class GaleriaViewerPageView: UIView {
|
|
|
222
222
|
mediaContainer.alpha = hidden ? 0 : 1
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
-
func sharedElementState() ->
|
|
225
|
+
func sharedElementState() -> NativeImagePreviewSharedElementState? {
|
|
226
226
|
if isVideoPage {
|
|
227
|
-
return posterImageView.
|
|
227
|
+
return posterImageView.nativeImagePreviewSharedElementState()
|
|
228
228
|
}
|
|
229
|
-
return imageView.
|
|
229
|
+
return imageView.nativeImagePreviewSharedElementState(clippingFrameInWindow: imageScrollView.frameInWindow())
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
-
func defaultTransitionGeometry(in windowBounds: CGRect) ->
|
|
232
|
+
func defaultTransitionGeometry(in windowBounds: CGRect) -> NativeImagePreviewSharedElementGeometry {
|
|
233
233
|
let imageSize = sharedElementView?.image?.size
|
|
234
234
|
?? imageView.image?.size
|
|
235
235
|
?? posterImageView.image?.size
|
|
236
236
|
?? CGSize(width: max(windowBounds.width * 0.72, 1), height: max(windowBounds.height * 0.42, 1))
|
|
237
|
-
let visibleFrame =
|
|
238
|
-
return
|
|
237
|
+
let visibleFrame = NativeImagePreviewViewerTransitionCoordinator.aspectFitRect(for: imageSize, in: windowBounds)
|
|
238
|
+
return NativeImagePreviewSharedElementGeometry(
|
|
239
239
|
visibleFrameInWindow: visibleFrame,
|
|
240
240
|
contentFrameInVisibleBounds: CGRect(origin: .zero, size: visibleFrame.size),
|
|
241
241
|
cornerRadius: 0
|
|
@@ -337,11 +337,11 @@ final class GaleriaViewerPageView: UIView {
|
|
|
337
337
|
}
|
|
338
338
|
videoPlayerView.onControlsInteractStart = { [weak self] in
|
|
339
339
|
guard let self = self else { return }
|
|
340
|
-
self.delegate?.
|
|
340
|
+
self.delegate?.nativeImagePreviewViewerPageView(self, setHorizontalPagingEnabled: false)
|
|
341
341
|
}
|
|
342
342
|
videoPlayerView.onControlsInteractEnd = { [weak self] in
|
|
343
343
|
guard let self = self else { return }
|
|
344
|
-
self.delegate?.
|
|
344
|
+
self.delegate?.nativeImagePreviewViewerPageView(self, setHorizontalPagingEnabled: self.canPageHorizontally)
|
|
345
345
|
}
|
|
346
346
|
|
|
347
347
|
posterImageView.backgroundColor = .clear
|
|
@@ -373,7 +373,7 @@ final class GaleriaViewerPageView: UIView {
|
|
|
373
373
|
} else {
|
|
374
374
|
showLoading()
|
|
375
375
|
}
|
|
376
|
-
delegate?.
|
|
376
|
+
delegate?.nativeImagePreviewViewerPageView(self, setHorizontalPagingEnabled: canPageHorizontally)
|
|
377
377
|
}
|
|
378
378
|
|
|
379
379
|
private func configureVideoPage(url: URL, poster: URL?) {
|
|
@@ -395,7 +395,7 @@ final class GaleriaViewerPageView: UIView {
|
|
|
395
395
|
posterImageView.image = nil
|
|
396
396
|
}
|
|
397
397
|
|
|
398
|
-
delegate?.
|
|
398
|
+
delegate?.nativeImagePreviewViewerPageView(self, setHorizontalPagingEnabled: true)
|
|
399
399
|
updateVideoPlaybackIfNeeded()
|
|
400
400
|
}
|
|
401
401
|
|
|
@@ -413,7 +413,7 @@ final class GaleriaViewerPageView: UIView {
|
|
|
413
413
|
self.hideSourcePreview()
|
|
414
414
|
}
|
|
415
415
|
self.layoutImageIfNeeded(resetZoom: true)
|
|
416
|
-
self.delegate?.
|
|
416
|
+
self.delegate?.nativeImagePreviewViewerPageView(self, setHorizontalPagingEnabled: self.canPageHorizontally)
|
|
417
417
|
}
|
|
418
418
|
}
|
|
419
419
|
}
|
|
@@ -558,7 +558,7 @@ final class GaleriaViewerPageView: UIView {
|
|
|
558
558
|
|
|
559
559
|
@objc
|
|
560
560
|
private func handleImageSingleTap(_ recognizer: UITapGestureRecognizer) {
|
|
561
|
-
delegate?.
|
|
561
|
+
delegate?.nativeImagePreviewViewerPageViewDidRequestDismiss(self)
|
|
562
562
|
}
|
|
563
563
|
|
|
564
564
|
@objc
|
|
@@ -578,7 +578,7 @@ final class GaleriaViewerPageView: UIView {
|
|
|
578
578
|
|
|
579
579
|
@objc
|
|
580
580
|
private func handleVideoSingleTap(_ recognizer: UITapGestureRecognizer) {
|
|
581
|
-
delegate?.
|
|
581
|
+
delegate?.nativeImagePreviewViewerPageViewDidToggleVideoChrome(self)
|
|
582
582
|
}
|
|
583
583
|
|
|
584
584
|
@objc
|
|
@@ -586,12 +586,12 @@ final class GaleriaViewerPageView: UIView {
|
|
|
586
586
|
switch recognizer.state {
|
|
587
587
|
case .began:
|
|
588
588
|
pinchInProgress = true
|
|
589
|
-
delegate?.
|
|
589
|
+
delegate?.nativeImagePreviewViewerPageViewDidBeginMultiTouch(self)
|
|
590
590
|
case .cancelled, .ended, .failed:
|
|
591
591
|
if pinchInProgress {
|
|
592
592
|
pinchInProgress = false
|
|
593
|
-
delegate?.
|
|
594
|
-
delegate?.
|
|
593
|
+
delegate?.nativeImagePreviewViewerPageViewDidEndMultiTouch(self)
|
|
594
|
+
delegate?.nativeImagePreviewViewerPageView(self, setHorizontalPagingEnabled: canPageHorizontally)
|
|
595
595
|
}
|
|
596
596
|
default:
|
|
597
597
|
break
|
|
@@ -599,22 +599,22 @@ final class GaleriaViewerPageView: UIView {
|
|
|
599
599
|
}
|
|
600
600
|
}
|
|
601
601
|
|
|
602
|
-
extension
|
|
602
|
+
extension NativeImagePreviewViewerPageView: UIScrollViewDelegate {
|
|
603
603
|
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
|
|
604
604
|
isVideoPage ? nil : imageView
|
|
605
605
|
}
|
|
606
606
|
|
|
607
607
|
func scrollViewDidZoom(_ scrollView: UIScrollView) {
|
|
608
608
|
layoutImageIfNeeded(resetZoom: false)
|
|
609
|
-
delegate?.
|
|
609
|
+
delegate?.nativeImagePreviewViewerPageView(self, setHorizontalPagingEnabled: canPageHorizontally)
|
|
610
610
|
}
|
|
611
611
|
|
|
612
612
|
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
|
|
613
|
-
delegate?.
|
|
613
|
+
delegate?.nativeImagePreviewViewerPageView(self, setHorizontalPagingEnabled: canPageHorizontally)
|
|
614
614
|
}
|
|
615
615
|
}
|
|
616
616
|
|
|
617
|
-
extension
|
|
617
|
+
extension NativeImagePreviewViewerPageView: UIGestureRecognizerDelegate {
|
|
618
618
|
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
|
|
619
619
|
guard gestureRecognizer === videoSingleTapGesture else { return true }
|
|
620
620
|
let location = touch.location(in: videoPlayerView)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import UIKit
|
|
2
2
|
|
|
3
|
-
private final class
|
|
3
|
+
private final class NativeImagePreviewTransitionSnapshotView: UIView {
|
|
4
4
|
private let imageView = UIImageView()
|
|
5
5
|
|
|
6
6
|
init(image: UIImage) {
|
|
@@ -28,10 +28,10 @@ private final class GaleriaTransitionSnapshotView: UIView {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
final class
|
|
31
|
+
final class NativeImagePreviewViewerTransitionCoordinator {
|
|
32
32
|
private weak var containerView: UIView?
|
|
33
33
|
private weak var hiddenAnchorView: UIView?
|
|
34
|
-
private weak var hiddenPageView:
|
|
34
|
+
private weak var hiddenPageView: NativeImagePreviewViewerPageView?
|
|
35
35
|
private var activeSnapshotView: UIView?
|
|
36
36
|
|
|
37
37
|
init(containerView: UIView) {
|
|
@@ -59,7 +59,7 @@ final class GaleriaViewerTransitionCoordinator {
|
|
|
59
59
|
|
|
60
60
|
func performOpenTransition(
|
|
61
61
|
from sourceView: UIImageView?,
|
|
62
|
-
to pageView:
|
|
62
|
+
to pageView: NativeImagePreviewViewerPageView?,
|
|
63
63
|
backgroundView: UIView,
|
|
64
64
|
contentView: UIView,
|
|
65
65
|
completion: @escaping () -> Void
|
|
@@ -77,7 +77,7 @@ final class GaleriaViewerTransitionCoordinator {
|
|
|
77
77
|
contentView.alpha = 0
|
|
78
78
|
|
|
79
79
|
flushLayoutForSharedElementSampling(of: sourceView)
|
|
80
|
-
guard let sourceView = sourceView, let sourceState = sourceView.
|
|
80
|
+
guard let sourceView = sourceView, let sourceState = sourceView.nativeImagePreviewSharedElementState() else {
|
|
81
81
|
animateSimpleAppearance(
|
|
82
82
|
backgroundView: backgroundView,
|
|
83
83
|
contentView: contentView,
|
|
@@ -103,7 +103,7 @@ final class GaleriaViewerTransitionCoordinator {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
let windowBounds = containerView.window?.bounds ?? UIScreen.main.bounds
|
|
106
|
-
let targetGeometry:
|
|
106
|
+
let targetGeometry: NativeImagePreviewSharedElementGeometry
|
|
107
107
|
if isReady, let pageState = pageView?.sharedElementState() {
|
|
108
108
|
targetGeometry = pageState.geometry
|
|
109
109
|
} else if let pageView = pageView {
|
|
@@ -141,7 +141,7 @@ final class GaleriaViewerTransitionCoordinator {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
func performCloseTransition(
|
|
144
|
-
from pageView:
|
|
144
|
+
from pageView: NativeImagePreviewViewerPageView?,
|
|
145
145
|
to anchorView: UIImageView?,
|
|
146
146
|
backgroundView: UIView,
|
|
147
147
|
contentView: UIView,
|
|
@@ -176,9 +176,9 @@ final class GaleriaViewerTransitionCoordinator {
|
|
|
176
176
|
hiddenPageView = pageView
|
|
177
177
|
pageView.setMediaHidden(true)
|
|
178
178
|
|
|
179
|
-
var targetGeometry:
|
|
179
|
+
var targetGeometry: NativeImagePreviewSharedElementGeometry?
|
|
180
180
|
flushLayoutForSharedElementSampling(of: anchorView)
|
|
181
|
-
if let anchorView = anchorView, let anchorState = anchorView.
|
|
181
|
+
if let anchorView = anchorView, let anchorState = anchorView.nativeImagePreviewSharedElementState() {
|
|
182
182
|
hiddenAnchorView = anchorView
|
|
183
183
|
anchorView.alpha = 0
|
|
184
184
|
targetGeometry = anchorState.geometry
|
|
@@ -240,12 +240,12 @@ final class GaleriaViewerTransitionCoordinator {
|
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
private func waitUntilReady(
|
|
243
|
-
pageView:
|
|
243
|
+
pageView: NativeImagePreviewViewerPageView,
|
|
244
244
|
timeout: TimeInterval,
|
|
245
245
|
completion: @escaping (Bool) -> Void
|
|
246
246
|
) {
|
|
247
247
|
let deadline = CACurrentMediaTime() + timeout
|
|
248
|
-
var lastStableState:
|
|
248
|
+
var lastStableState: NativeImagePreviewSharedElementState?
|
|
249
249
|
var stableFrameCount = 0
|
|
250
250
|
|
|
251
251
|
func poll() {
|
|
@@ -284,19 +284,19 @@ final class GaleriaViewerTransitionCoordinator {
|
|
|
284
284
|
containerView?.layoutIfNeeded()
|
|
285
285
|
}
|
|
286
286
|
|
|
287
|
-
private func makeSnapshot(from state:
|
|
288
|
-
|
|
287
|
+
private func makeSnapshot(from state: NativeImagePreviewSharedElementState) -> NativeImagePreviewTransitionSnapshotView {
|
|
288
|
+
NativeImagePreviewTransitionSnapshotView(image: state.image)
|
|
289
289
|
}
|
|
290
290
|
|
|
291
|
-
private func apply(_ geometry:
|
|
291
|
+
private func apply(_ geometry: NativeImagePreviewSharedElementGeometry, to snapshotView: NativeImagePreviewTransitionSnapshotView) {
|
|
292
292
|
snapshotView.frame = frameInContainer(fromWindowFrame: geometry.visibleFrameInWindow)
|
|
293
293
|
snapshotView.applyContentFrame(geometry.contentFrameInVisibleBounds)
|
|
294
294
|
snapshotView.layer.cornerRadius = geometry.cornerRadius
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
-
private func defaultGeometry(for imageSize: CGSize, in windowBounds: CGRect) ->
|
|
297
|
+
private func defaultGeometry(for imageSize: CGSize, in windowBounds: CGRect) -> NativeImagePreviewSharedElementGeometry {
|
|
298
298
|
let visibleFrame = Self.aspectFitRect(for: imageSize, in: windowBounds)
|
|
299
|
-
return
|
|
299
|
+
return NativeImagePreviewSharedElementGeometry(
|
|
300
300
|
visibleFrameInWindow: visibleFrame,
|
|
301
301
|
contentFrameInVisibleBounds: CGRect(origin: .zero, size: visibleFrame.size),
|
|
302
302
|
cornerRadius: 0
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import ExpoModulesCore
|
|
2
2
|
|
|
3
|
-
public class
|
|
3
|
+
public class NativeImagePreviewModule: Module {
|
|
4
4
|
public func definition() -> ModuleDefinition {
|
|
5
5
|
Name("ZKitNativeImagePreview")
|
|
6
6
|
|
|
7
|
-
View(
|
|
7
|
+
View(NativeImagePreviewView.self) {
|
|
8
8
|
Events("onIndexChange")
|
|
9
9
|
|
|
10
10
|
OnViewDidUpdateProps { (view) in
|
|
@@ -23,8 +23,8 @@ public class GaleriaModule: Module {
|
|
|
23
23
|
view.initialIndex = index
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
Prop("
|
|
27
|
-
view.
|
|
26
|
+
Prop("previewGroupId") { (view, previewGroupId: String?) in
|
|
27
|
+
view.previewGroupId = previewGroupId
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
Prop("theme") { (view, theme: Theme?) in
|