@lodev09/react-native-true-sheet 3.0.0-beta.18 → 3.0.0-beta.19
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/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +169 -82
- package/ios/TrueSheetView.mm +10 -28
- package/ios/TrueSheetViewController.h +8 -8
- package/ios/TrueSheetViewController.mm +184 -148
- package/lib/module/TrueSheet.js +6 -3
- package/lib/module/TrueSheet.js.map +1 -1
- package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/TrueSheet.tsx +6 -4
|
@@ -11,6 +11,7 @@ import android.view.WindowManager
|
|
|
11
11
|
import android.view.accessibility.AccessibilityNodeInfo
|
|
12
12
|
import android.widget.FrameLayout
|
|
13
13
|
import androidx.core.view.isNotEmpty
|
|
14
|
+
import androidx.core.view.isVisible
|
|
14
15
|
import com.facebook.react.R
|
|
15
16
|
import com.facebook.react.uimanager.JSPointerDispatcher
|
|
16
17
|
import com.facebook.react.uimanager.JSTouchDispatcher
|
|
@@ -112,7 +113,11 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
112
113
|
var currentDetentIndex: Int = -1
|
|
113
114
|
private set
|
|
114
115
|
|
|
116
|
+
// Resolved detent positions (Y coordinate when sheet rests at each detent)
|
|
117
|
+
private val resolvedDetentPositions = mutableListOf<Int>()
|
|
118
|
+
|
|
115
119
|
private var isDragging = false
|
|
120
|
+
private var isReconfiguring = false
|
|
116
121
|
private var windowAnimation: Int = 0
|
|
117
122
|
private var lastEmittedPositionPx: Int = -1
|
|
118
123
|
|
|
@@ -275,7 +280,11 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
275
280
|
val detentInfo = getDetentInfoForIndex(currentDetentIndex)
|
|
276
281
|
val detent = getDetentValueForIndex(detentInfo.index)
|
|
277
282
|
val positionPx = bottomSheetView?.let { ScreenUtils.getScreenY(it) } ?: screenHeight
|
|
283
|
+
|
|
278
284
|
delegate?.viewControllerDidPresent(detentInfo.index, detentInfo.position, detent)
|
|
285
|
+
|
|
286
|
+
// Store resolved position for initial detent
|
|
287
|
+
storeResolvedPosition(detentInfo.index)
|
|
279
288
|
emitChangePositionDelegate(detentInfo.index, positionPx, realtime = false)
|
|
280
289
|
|
|
281
290
|
// Notify parent sheet that it has lost focus (after this sheet appeared)
|
|
@@ -342,7 +351,38 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
342
351
|
|
|
343
352
|
BottomSheetBehavior.STATE_EXPANDED,
|
|
344
353
|
BottomSheetBehavior.STATE_COLLAPSED,
|
|
345
|
-
BottomSheetBehavior.STATE_HALF_EXPANDED ->
|
|
354
|
+
BottomSheetBehavior.STATE_HALF_EXPANDED -> {
|
|
355
|
+
// Ignore state changes triggered by content size reconfiguration
|
|
356
|
+
if (isReconfiguring) return
|
|
357
|
+
|
|
358
|
+
getDetentInfoForState(newState)?.let { detentInfo ->
|
|
359
|
+
// Store resolved position when sheet settles
|
|
360
|
+
storeResolvedPosition(detentInfo.index)
|
|
361
|
+
|
|
362
|
+
if (isDragging) {
|
|
363
|
+
// Handle drag end
|
|
364
|
+
val detent = getDetentValueForIndex(detentInfo.index)
|
|
365
|
+
delegate?.viewControllerDidDragEnd(detentInfo.index, detentInfo.position, detent)
|
|
366
|
+
|
|
367
|
+
if (detentInfo.index != currentDetentIndex) {
|
|
368
|
+
presentPromise?.invoke()
|
|
369
|
+
presentPromise = null
|
|
370
|
+
currentDetentIndex = detentInfo.index
|
|
371
|
+
setupDimmedBackground(detentInfo.index)
|
|
372
|
+
delegate?.viewControllerDidChangeDetent(detentInfo.index, detentInfo.position, detent)
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
isDragging = false
|
|
376
|
+
} else {
|
|
377
|
+
// Handle programmatic resize - emit detent change after sheet settles
|
|
378
|
+
if (detentInfo.index != currentDetentIndex) {
|
|
379
|
+
val detent = getDetentValueForIndex(detentInfo.index)
|
|
380
|
+
currentDetentIndex = detentInfo.index
|
|
381
|
+
delegate?.viewControllerDidChangeDetent(detentInfo.index, detentInfo.position, detent)
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
346
386
|
|
|
347
387
|
else -> {}
|
|
348
388
|
}
|
|
@@ -438,15 +478,14 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
438
478
|
return
|
|
439
479
|
}
|
|
440
480
|
|
|
441
|
-
currentDetentIndex = detentIndex
|
|
442
481
|
setupDimmedBackground(detentIndex)
|
|
443
482
|
|
|
444
483
|
if (isPresented) {
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
delegate?.viewControllerDidChangeDetent(detentInfo.index, detentInfo.position, detent)
|
|
484
|
+
// Detent change will be emitted when sheet settles in onStateChanged
|
|
485
|
+
// Don't update currentDetentIndex here - it will be updated when sheet settles
|
|
448
486
|
setStateForDetentIndex(detentIndex)
|
|
449
487
|
} else {
|
|
488
|
+
currentDetentIndex = detentIndex
|
|
450
489
|
isDragging = false
|
|
451
490
|
setupSheetDetents()
|
|
452
491
|
setStateForDetentIndex(detentIndex)
|
|
@@ -482,39 +521,53 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
482
521
|
fun setupSheetDetents() {
|
|
483
522
|
val behavior = this.behavior ?: return
|
|
484
523
|
|
|
524
|
+
// Reset resolved positions if detents count changed
|
|
525
|
+
if (resolvedDetentPositions.size != detents.size) {
|
|
526
|
+
resolvedDetentPositions.clear()
|
|
527
|
+
repeat(detents.size) { resolvedDetentPositions.add(0) }
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
// Always update auto detent positions based on current content height
|
|
531
|
+
for (i in detents.indices) {
|
|
532
|
+
if (detents[i] == -1.0) {
|
|
533
|
+
val detentHeight = getDetentHeight(detents[i])
|
|
534
|
+
resolvedDetentPositions[i] = screenHeight - detentHeight
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
// Flag to prevent state change callbacks from updating detent index during reconfiguration
|
|
539
|
+
isReconfiguring = true
|
|
540
|
+
|
|
485
541
|
behavior.apply {
|
|
486
542
|
skipCollapsed = false
|
|
487
|
-
isFitToContents =
|
|
543
|
+
isFitToContents = false
|
|
488
544
|
maxWidth = DEFAULT_MAX_WIDTH.dpToPx().toInt()
|
|
489
545
|
|
|
490
546
|
when (detents.size) {
|
|
491
547
|
1 -> {
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
if (isPresented && detents[0] == -1.0) {
|
|
496
|
-
sheetContainer?.apply {
|
|
497
|
-
val params = layoutParams
|
|
498
|
-
params.height = maxHeight
|
|
499
|
-
layoutParams = params
|
|
500
|
-
}
|
|
501
|
-
}
|
|
548
|
+
setPeekHeight(getDetentHeight(detents[0]), isPresented)
|
|
549
|
+
expandedOffset = screenHeight - peekHeight
|
|
502
550
|
}
|
|
503
551
|
|
|
504
552
|
2 -> {
|
|
505
553
|
setPeekHeight(getDetentHeight(detents[0]), isPresented)
|
|
506
|
-
|
|
554
|
+
expandedOffset = screenHeight - getDetentHeight(detents[1])
|
|
507
555
|
}
|
|
508
556
|
|
|
509
557
|
3 -> {
|
|
510
|
-
isFitToContents = false
|
|
511
558
|
setPeekHeight(getDetentHeight(detents[0]), isPresented)
|
|
512
|
-
maxHeight = getDetentHeight(detents[2])
|
|
513
|
-
expandedOffset = sheetTopInset
|
|
514
559
|
halfExpandedRatio = minOf(getDetentHeight(detents[1]).toFloat() / screenHeight.toFloat(), 1.0f)
|
|
560
|
+
expandedOffset = screenHeight - getDetentHeight(detents[2])
|
|
515
561
|
}
|
|
516
562
|
}
|
|
517
563
|
}
|
|
564
|
+
|
|
565
|
+
// Re-apply current state to update position after config changes
|
|
566
|
+
if (isPresented) {
|
|
567
|
+
setStateForDetentIndex(currentDetentIndex)
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
isReconfiguring = false
|
|
518
571
|
}
|
|
519
572
|
|
|
520
573
|
fun setupGrabber() {
|
|
@@ -644,39 +697,99 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
644
697
|
}
|
|
645
698
|
|
|
646
699
|
/**
|
|
647
|
-
*
|
|
648
|
-
*
|
|
700
|
+
* Stores the current Y position as the resolved position for the given detent index.
|
|
701
|
+
* This is called when the sheet settles at a detent to capture the actual position
|
|
702
|
+
* which may differ from the calculated position due to system adjustments.
|
|
649
703
|
*/
|
|
650
|
-
private fun
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
if (
|
|
704
|
+
private fun storeResolvedPosition(index: Int) {
|
|
705
|
+
if (index < 0 || index >= resolvedDetentPositions.size) return
|
|
706
|
+
val positionPx = bottomSheetView?.let { ScreenUtils.getScreenY(it) } ?: return
|
|
707
|
+
if (positionPx in 1..<screenHeight) {
|
|
708
|
+
resolvedDetentPositions[index] = positionPx
|
|
709
|
+
}
|
|
710
|
+
}
|
|
654
711
|
|
|
655
|
-
|
|
656
|
-
|
|
712
|
+
/**
|
|
713
|
+
* Stores the resolved position for the current detent.
|
|
714
|
+
* Called from TrueSheetView when content size changes.
|
|
715
|
+
*/
|
|
716
|
+
fun storeCurrentResolvedPosition() {
|
|
717
|
+
storeResolvedPosition(currentDetentIndex)
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
/**
|
|
721
|
+
* Returns the estimated Y position for a detent index, using stored positions when available.
|
|
722
|
+
*/
|
|
723
|
+
private fun getEstimatedPositionForIndex(index: Int): Int {
|
|
724
|
+
if (index < 0 || index >= resolvedDetentPositions.size) return screenHeight
|
|
725
|
+
|
|
726
|
+
val storedPos = resolvedDetentPositions[index]
|
|
727
|
+
if (storedPos > 0) return storedPos
|
|
657
728
|
|
|
658
|
-
//
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
val progress = currentDetent / firstDetentValue
|
|
663
|
-
return progress - 1f
|
|
729
|
+
// Estimate based on getDetentHeight which accounts for bottomInset and maxAllowedHeight
|
|
730
|
+
if (index < detents.size) {
|
|
731
|
+
val detentHeight = getDetentHeight(detents[index])
|
|
732
|
+
return screenHeight - detentHeight
|
|
664
733
|
}
|
|
665
734
|
|
|
666
|
-
|
|
735
|
+
return screenHeight
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
/**
|
|
739
|
+
* Finds the segment index and interpolation progress for a given position.
|
|
740
|
+
* Returns a Triple of (fromIndex, toIndex, progress) where progress is 0-1 within that segment.
|
|
741
|
+
* Returns null if position count is less than 2.
|
|
742
|
+
*/
|
|
743
|
+
private fun findSegmentForPosition(positionPx: Int): Triple<Int, Int, Float>? {
|
|
744
|
+
val count = resolvedDetentPositions.size
|
|
745
|
+
if (count < 2) return null
|
|
746
|
+
|
|
747
|
+
val firstPos = getEstimatedPositionForIndex(0)
|
|
748
|
+
val lastPos = getEstimatedPositionForIndex(count - 1)
|
|
749
|
+
|
|
750
|
+
// Below first detent
|
|
751
|
+
if (positionPx > firstPos) {
|
|
752
|
+
val range = screenHeight - firstPos
|
|
753
|
+
val progress = if (range > 0) (positionPx - firstPos).toFloat() / range else 0f
|
|
754
|
+
return Triple(-1, 0, progress) // Special index -1 for below first
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
// Above last detent
|
|
758
|
+
if (positionPx < lastPos) {
|
|
759
|
+
return Triple(count - 1, count - 1, 0f)
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
// Find segment (positions decrease as index increases)
|
|
667
763
|
for (i in 0 until count - 1) {
|
|
668
|
-
val
|
|
669
|
-
val
|
|
670
|
-
|
|
671
|
-
if (
|
|
672
|
-
val range =
|
|
673
|
-
if (range
|
|
674
|
-
|
|
675
|
-
return i + maxOf(0f, minOf(1f, progress))
|
|
764
|
+
val pos = getEstimatedPositionForIndex(i)
|
|
765
|
+
val nextPos = getEstimatedPositionForIndex(i + 1)
|
|
766
|
+
|
|
767
|
+
if (positionPx <= pos && positionPx >= nextPos) {
|
|
768
|
+
val range = pos - nextPos
|
|
769
|
+
val progress = if (range > 0) (pos - positionPx).toFloat() / range else 0f
|
|
770
|
+
return Triple(i, i + 1, maxOf(0f, minOf(1f, progress)))
|
|
676
771
|
}
|
|
677
772
|
}
|
|
678
773
|
|
|
679
|
-
return (count - 1)
|
|
774
|
+
return Triple(count - 1, count - 1, 0f)
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
/**
|
|
778
|
+
* Calculates the interpolated index based on position.
|
|
779
|
+
* Returns a continuous value (e.g., 0.5 means halfway between detent 0 and 1).
|
|
780
|
+
*/
|
|
781
|
+
private fun getInterpolatedIndexForPosition(positionPx: Int): Float {
|
|
782
|
+
val count = resolvedDetentPositions.size
|
|
783
|
+
if (count == 0) return -1f
|
|
784
|
+
if (count == 1) return 0f
|
|
785
|
+
|
|
786
|
+
val segment = findSegmentForPosition(positionPx) ?: return 0f
|
|
787
|
+
val (fromIndex, _, progress) = segment
|
|
788
|
+
|
|
789
|
+
// Below first detent
|
|
790
|
+
if (fromIndex == -1) return -progress
|
|
791
|
+
|
|
792
|
+
return fromIndex + progress
|
|
680
793
|
}
|
|
681
794
|
|
|
682
795
|
/**
|
|
@@ -684,27 +797,21 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
684
797
|
* Returns the actual screen fraction, clamped to valid detent range.
|
|
685
798
|
*/
|
|
686
799
|
private fun getInterpolatedDetentForPosition(positionPx: Int): Float {
|
|
687
|
-
|
|
688
|
-
val currentDetent = (screenHeight - positionPx).toFloat() / screenHeight.toFloat()
|
|
689
|
-
|
|
690
|
-
val count = detents.size
|
|
800
|
+
val count = resolvedDetentPositions.size
|
|
691
801
|
if (count == 0) return 0f
|
|
692
802
|
|
|
693
|
-
|
|
694
|
-
val
|
|
695
|
-
val lastDetentValue = getDetentValueForIndex(count - 1)
|
|
696
|
-
|
|
697
|
-
if (currentDetent < firstDetentValue) {
|
|
698
|
-
// Below first detent - interpolate from 0 to first detent
|
|
699
|
-
if (firstDetentValue <= 0) return 0f
|
|
700
|
-
return maxOf(0f, currentDetent)
|
|
701
|
-
}
|
|
803
|
+
val segment = findSegmentForPosition(positionPx) ?: return getDetentValueForIndex(0)
|
|
804
|
+
val (fromIndex, toIndex, progress) = segment
|
|
702
805
|
|
|
703
|
-
|
|
704
|
-
|
|
806
|
+
// Below first detent
|
|
807
|
+
if (fromIndex == -1) {
|
|
808
|
+
val firstDetent = getDetentValueForIndex(0)
|
|
809
|
+
return maxOf(0f, firstDetent * (1 - progress))
|
|
705
810
|
}
|
|
706
811
|
|
|
707
|
-
|
|
812
|
+
val fromDetent = getDetentValueForIndex(fromIndex)
|
|
813
|
+
val toDetent = getDetentValueForIndex(toIndex)
|
|
814
|
+
return fromDetent + progress * (toDetent - fromDetent)
|
|
708
815
|
}
|
|
709
816
|
|
|
710
817
|
/**
|
|
@@ -767,27 +874,6 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
767
874
|
delegate?.viewControllerDidDragChange(detentInfo.index, detentInfo.position, detent)
|
|
768
875
|
}
|
|
769
876
|
|
|
770
|
-
private fun handleDragEnd(state: Int) {
|
|
771
|
-
if (!isDragging) return
|
|
772
|
-
|
|
773
|
-
val detentInfo = getDetentInfoForState(state)
|
|
774
|
-
detentInfo?.let {
|
|
775
|
-
val detent = getDetentValueForIndex(it.index)
|
|
776
|
-
delegate?.viewControllerDidDragEnd(it.index, it.position, detent)
|
|
777
|
-
|
|
778
|
-
if (it.index != currentDetentIndex) {
|
|
779
|
-
presentPromise?.invoke()
|
|
780
|
-
presentPromise = null
|
|
781
|
-
|
|
782
|
-
currentDetentIndex = it.index
|
|
783
|
-
setupDimmedBackground(it.index)
|
|
784
|
-
delegate?.viewControllerDidChangeDetent(it.index, it.position, detent)
|
|
785
|
-
}
|
|
786
|
-
}
|
|
787
|
-
|
|
788
|
-
isDragging = false
|
|
789
|
-
}
|
|
790
|
-
|
|
791
877
|
// ====================================================================
|
|
792
878
|
// MARK: - Detent Calculations
|
|
793
879
|
// ====================================================================
|
|
@@ -890,6 +976,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
890
976
|
setupSheetDetents()
|
|
891
977
|
this.post {
|
|
892
978
|
positionFooter()
|
|
979
|
+
storeResolvedPosition(currentDetentIndex)
|
|
893
980
|
val positionPx = bottomSheetView?.let { ScreenUtils.getScreenY(it) } ?: screenHeight
|
|
894
981
|
emitChangePositionDelegate(currentDetentIndex, positionPx, realtime = false)
|
|
895
982
|
}
|
|
@@ -911,7 +998,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
911
998
|
*/
|
|
912
999
|
override fun dispatchTouchEvent(event: MotionEvent): Boolean {
|
|
913
1000
|
val footer = containerView?.footerView
|
|
914
|
-
if (footer != null && footer.
|
|
1001
|
+
if (footer != null && footer.isVisible) {
|
|
915
1002
|
val footerLocation = ScreenUtils.getScreenLocation(footer)
|
|
916
1003
|
val touchScreenX = event.rawX.toInt()
|
|
917
1004
|
val touchScreenY = event.rawY.toInt()
|
package/ios/TrueSheetView.mm
CHANGED
|
@@ -274,7 +274,7 @@ using namespace facebook::react;
|
|
|
274
274
|
|
|
275
275
|
if (_controller.isPresented) {
|
|
276
276
|
[_controller.sheetPresentationController animateChanges:^{
|
|
277
|
-
[self->_controller
|
|
277
|
+
[self->_controller resizeToDetentIndex:index];
|
|
278
278
|
}];
|
|
279
279
|
if (completion) {
|
|
280
280
|
completion(YES, nil);
|
|
@@ -327,14 +327,6 @@ using namespace facebook::react;
|
|
|
327
327
|
}];
|
|
328
328
|
}
|
|
329
329
|
|
|
330
|
-
- (void)resizeToIndex:(NSInteger)index {
|
|
331
|
-
if (_controller.isPresented) {
|
|
332
|
-
[_controller.sheetPresentationController animateChanges:^{
|
|
333
|
-
[self->_controller setupActiveDetentWithIndex:index];
|
|
334
|
-
}];
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
330
|
#pragma mark - TrueSheetContainerViewDelegate
|
|
339
331
|
|
|
340
332
|
/**
|
|
@@ -348,7 +340,6 @@ using namespace facebook::react;
|
|
|
348
340
|
|
|
349
341
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
350
342
|
self->_isSheetUpdatePending = NO;
|
|
351
|
-
self->_controller.layoutTransitioning = YES;
|
|
352
343
|
|
|
353
344
|
[self->_controller.sheetPresentationController animateChanges:^{
|
|
354
345
|
[self->_controller setupSheetDetents];
|
|
@@ -368,27 +359,19 @@ using namespace facebook::react;
|
|
|
368
359
|
|
|
369
360
|
#pragma mark - TrueSheetViewControllerDelegate
|
|
370
361
|
|
|
371
|
-
- (void)
|
|
372
|
-
NSInteger index = [_controller currentDetentIndex];
|
|
362
|
+
- (void)viewControllerWillPresentAtIndex:(NSInteger)index position:(CGFloat)position detent:(CGFloat)detent {
|
|
373
363
|
_controller.activeDetentIndex = index;
|
|
374
|
-
|
|
375
|
-
[TrueSheetLifecycleEvents emitWillPresent:_eventEmitter
|
|
376
|
-
index:index
|
|
377
|
-
position:_controller.currentPosition
|
|
378
|
-
detent:detent];
|
|
364
|
+
[TrueSheetLifecycleEvents emitWillPresent:_eventEmitter index:index position:position detent:detent];
|
|
379
365
|
}
|
|
380
366
|
|
|
381
|
-
- (void)
|
|
382
|
-
|
|
383
|
-
CGFloat detent = [_controller detentValueForIndex:index];
|
|
384
|
-
[TrueSheetLifecycleEvents emitDidPresent:_eventEmitter
|
|
385
|
-
index:index
|
|
386
|
-
position:_controller.currentPosition
|
|
387
|
-
detent:detent];
|
|
367
|
+
- (void)viewControllerDidPresentAtIndex:(NSInteger)index position:(CGFloat)position detent:(CGFloat)detent {
|
|
368
|
+
[TrueSheetLifecycleEvents emitDidPresent:_eventEmitter index:index position:position detent:detent];
|
|
388
369
|
}
|
|
389
370
|
|
|
390
|
-
- (void)viewControllerDidDrag:(UIGestureRecognizerState)state
|
|
391
|
-
|
|
371
|
+
- (void)viewControllerDidDrag:(UIGestureRecognizerState)state
|
|
372
|
+
index:(NSInteger)index
|
|
373
|
+
position:(CGFloat)position
|
|
374
|
+
detent:(CGFloat)detent {
|
|
392
375
|
switch (state) {
|
|
393
376
|
case UIGestureRecognizerStateBegan:
|
|
394
377
|
[TrueSheetDragEvents emitDragBegin:_eventEmitter index:index position:position detent:detent];
|
|
@@ -414,11 +397,10 @@ using namespace facebook::react;
|
|
|
414
397
|
[TrueSheetLifecycleEvents emitDidDismiss:_eventEmitter];
|
|
415
398
|
}
|
|
416
399
|
|
|
417
|
-
- (void)viewControllerDidChangeDetent:(NSInteger)index position:(CGFloat)position {
|
|
400
|
+
- (void)viewControllerDidChangeDetent:(NSInteger)index position:(CGFloat)position detent:(CGFloat)detent {
|
|
418
401
|
if (_controller.activeDetentIndex != index) {
|
|
419
402
|
_controller.activeDetentIndex = index;
|
|
420
403
|
}
|
|
421
|
-
CGFloat detent = [_controller detentValueForIndex:index];
|
|
422
404
|
[TrueSheetStateEvents emitDetentChange:_eventEmitter index:index position:position detent:detent];
|
|
423
405
|
}
|
|
424
406
|
|
|
@@ -19,12 +19,15 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
19
19
|
|
|
20
20
|
@protocol TrueSheetViewControllerDelegate <NSObject>
|
|
21
21
|
|
|
22
|
-
- (void)
|
|
23
|
-
- (void)
|
|
22
|
+
- (void)viewControllerWillPresentAtIndex:(NSInteger)index position:(CGFloat)position detent:(CGFloat)detent;
|
|
23
|
+
- (void)viewControllerDidPresentAtIndex:(NSInteger)index position:(CGFloat)position detent:(CGFloat)detent;
|
|
24
24
|
- (void)viewControllerWillDismiss;
|
|
25
25
|
- (void)viewControllerDidDismiss;
|
|
26
|
-
- (void)viewControllerDidChangeDetent:(NSInteger)index position:(CGFloat)position;
|
|
27
|
-
- (void)viewControllerDidDrag:(UIGestureRecognizerState)state
|
|
26
|
+
- (void)viewControllerDidChangeDetent:(NSInteger)index position:(CGFloat)position detent:(CGFloat)detent;
|
|
27
|
+
- (void)viewControllerDidDrag:(UIGestureRecognizerState)state
|
|
28
|
+
index:(NSInteger)index
|
|
29
|
+
position:(CGFloat)position
|
|
30
|
+
detent:(CGFloat)detent;
|
|
28
31
|
- (void)viewControllerDidChangePosition:(CGFloat)index
|
|
29
32
|
position:(CGFloat)position
|
|
30
33
|
detent:(CGFloat)detent
|
|
@@ -59,18 +62,15 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
59
62
|
@property (nonatomic, strong, nullable) NSNumber *blurIntensity;
|
|
60
63
|
@property (nonatomic, assign) BOOL blurInteraction;
|
|
61
64
|
@property (nonatomic, assign) BOOL pageSizing;
|
|
62
|
-
@property (nonatomic, assign) BOOL layoutTransitioning;
|
|
63
65
|
@property (nonatomic, assign) BOOL isPresented;
|
|
64
66
|
@property (nonatomic, assign) NSInteger activeDetentIndex;
|
|
65
67
|
|
|
66
68
|
- (void)applyActiveDetent;
|
|
67
69
|
- (void)setupActiveDetentWithIndex:(NSInteger)index;
|
|
70
|
+
- (void)resizeToDetentIndex:(NSInteger)index;
|
|
68
71
|
- (void)setupSheetDetents;
|
|
69
72
|
- (void)setupSheetProps;
|
|
70
73
|
- (void)updateDraggable;
|
|
71
|
-
- (NSInteger)currentDetentIndex;
|
|
72
|
-
- (CGFloat)currentPosition;
|
|
73
|
-
- (CGFloat)detentValueForIndex:(NSInteger)index;
|
|
74
74
|
|
|
75
75
|
@end
|
|
76
76
|
|
|
@@ -21,18 +21,17 @@
|
|
|
21
21
|
|
|
22
22
|
@implementation TrueSheetViewController {
|
|
23
23
|
CGFloat _lastPosition;
|
|
24
|
-
BOOL _isTransitioning;
|
|
25
24
|
BOOL _isDragging;
|
|
26
|
-
|
|
27
|
-
// Hidden view used to track position during native transition animations
|
|
28
|
-
UIView *_fakeTransitionView;
|
|
29
|
-
CADisplayLink *_displayLink;
|
|
25
|
+
NSInteger _pendingDetentIndex;
|
|
30
26
|
|
|
31
27
|
// Reference to parent TrueSheetViewController (if presented from another sheet)
|
|
32
28
|
__weak TrueSheetViewController *_parentSheetController;
|
|
33
29
|
|
|
34
30
|
// Blur effect view
|
|
35
31
|
TrueSheetBlurView *_blurView;
|
|
32
|
+
|
|
33
|
+
// Resolved detent positions (Y coordinate when sheet rests at each detent)
|
|
34
|
+
NSMutableArray<NSNumber *> *_resolvedDetentPositions;
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
#pragma mark - Initialization
|
|
@@ -48,28 +47,19 @@
|
|
|
48
47
|
_dimmedDetentIndex = @(0);
|
|
49
48
|
_pageSizing = YES;
|
|
50
49
|
_lastPosition = 0;
|
|
51
|
-
_isTransitioning = NO;
|
|
52
50
|
_isDragging = NO;
|
|
53
|
-
_layoutTransitioning = NO;
|
|
54
51
|
_isPresented = NO;
|
|
55
52
|
_activeDetentIndex = -1;
|
|
56
|
-
|
|
57
|
-
_fakeTransitionView = [[UIView alloc] init];
|
|
58
|
-
_fakeTransitionView.hidden = YES;
|
|
59
|
-
_fakeTransitionView.userInteractionEnabled = NO;
|
|
53
|
+
_pendingDetentIndex = -1;
|
|
60
54
|
|
|
61
55
|
_blurInteraction = YES;
|
|
56
|
+
_resolvedDetentPositions = [NSMutableArray array];
|
|
62
57
|
}
|
|
63
58
|
return self;
|
|
64
59
|
}
|
|
65
60
|
|
|
66
61
|
- (void)dealloc {
|
|
67
62
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
|
68
|
-
|
|
69
|
-
if (_displayLink) {
|
|
70
|
-
[_displayLink invalidate];
|
|
71
|
-
_displayLink = nil;
|
|
72
|
-
}
|
|
73
63
|
}
|
|
74
64
|
|
|
75
65
|
#pragma mark - Computed Properties
|
|
@@ -82,7 +72,7 @@
|
|
|
82
72
|
}
|
|
83
73
|
|
|
84
74
|
- (BOOL)isActiveAndVisible {
|
|
85
|
-
return self.isViewLoaded && self.view.window != nil
|
|
75
|
+
return self.isViewLoaded && self.view.window != nil;
|
|
86
76
|
}
|
|
87
77
|
|
|
88
78
|
- (UIView *)presentedView {
|
|
@@ -148,10 +138,15 @@
|
|
|
148
138
|
}
|
|
149
139
|
}
|
|
150
140
|
|
|
151
|
-
if ([self.delegate respondsToSelector:@selector(
|
|
152
|
-
|
|
141
|
+
if ([self.delegate respondsToSelector:@selector(viewControllerWillPresentAtIndex:position:detent:)]) {
|
|
142
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
143
|
+
NSInteger index = [self currentDetentIndex];
|
|
144
|
+
CGFloat position = self.currentPosition;
|
|
145
|
+
CGFloat detent = [self detentValueForIndex:index];
|
|
146
|
+
|
|
147
|
+
[self.delegate viewControllerWillPresentAtIndex:index position:position detent:detent];
|
|
148
|
+
});
|
|
153
149
|
}
|
|
154
|
-
[self setupTransitionPositionTracking];
|
|
155
150
|
}
|
|
156
151
|
}
|
|
157
152
|
|
|
@@ -166,8 +161,12 @@
|
|
|
166
161
|
}
|
|
167
162
|
}
|
|
168
163
|
|
|
169
|
-
if ([self.delegate respondsToSelector:@selector(
|
|
170
|
-
|
|
164
|
+
if ([self.delegate respondsToSelector:@selector(viewControllerDidPresentAtIndex:position:detent:)]) {
|
|
165
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
166
|
+
NSInteger index = [self currentDetentIndex];
|
|
167
|
+
CGFloat detent = [self detentValueForIndex:index];
|
|
168
|
+
[self.delegate viewControllerDidPresentAtIndex:index position:self.currentPosition detent:detent];
|
|
169
|
+
});
|
|
171
170
|
}
|
|
172
171
|
[self setupGestureRecognizer];
|
|
173
172
|
_isPresented = YES;
|
|
@@ -187,12 +186,14 @@
|
|
|
187
186
|
}
|
|
188
187
|
}
|
|
189
188
|
|
|
189
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
190
|
+
[self emitChangePositionDelegateWithPosition:self.currentPosition realtime:NO];
|
|
191
|
+
});
|
|
192
|
+
|
|
190
193
|
if ([self.delegate respondsToSelector:@selector(viewControllerWillDismiss)]) {
|
|
191
194
|
[self.delegate viewControllerWillDismiss];
|
|
192
195
|
}
|
|
193
196
|
}
|
|
194
|
-
|
|
195
|
-
[self setupTransitionPositionTracking];
|
|
196
197
|
}
|
|
197
198
|
|
|
198
199
|
- (void)viewDidDisappear:(BOOL)animated {
|
|
@@ -228,13 +229,29 @@
|
|
|
228
229
|
[self.delegate viewControllerDidChangeSize:self.view.frame.size];
|
|
229
230
|
}
|
|
230
231
|
|
|
231
|
-
if
|
|
232
|
-
|
|
233
|
-
|
|
232
|
+
// Check if there's an active presented controller that has settled (not being presented/dismissed)
|
|
233
|
+
UIViewController *presented = self.presentedViewController;
|
|
234
|
+
BOOL hasPresentedController = presented != nil && !presented.isBeingPresented && !presented.isBeingDismissed;
|
|
235
|
+
|
|
236
|
+
if (!_isDragging) {
|
|
237
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
238
|
+
// Update stored position for current detent (handles content size changes)
|
|
239
|
+
[self storeResolvedPositionForIndex:[self currentDetentIndex]];
|
|
240
|
+
|
|
241
|
+
[self emitChangePositionDelegateWithPosition:self.currentPosition realtime:hasPresentedController];
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Emit pending detent change after programmatic resize settles
|
|
246
|
+
if (_pendingDetentIndex >= 0) {
|
|
247
|
+
NSInteger pendingIndex = _pendingDetentIndex;
|
|
248
|
+
_pendingDetentIndex = -1;
|
|
234
249
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
250
|
+
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
|
251
|
+
if ([self.delegate respondsToSelector:@selector(viewControllerDidChangeDetent:position:detent:)]) {
|
|
252
|
+
CGFloat detent = [self detentValueForIndex:pendingIndex];
|
|
253
|
+
[self.delegate viewControllerDidChangeDetent:pendingIndex position:self.currentPosition detent:detent];
|
|
254
|
+
}
|
|
238
255
|
});
|
|
239
256
|
}
|
|
240
257
|
}
|
|
@@ -310,9 +327,10 @@
|
|
|
310
327
|
|
|
311
328
|
- (void)handlePanGesture:(UIPanGestureRecognizer *)gesture {
|
|
312
329
|
NSInteger index = [self currentDetentIndex];
|
|
330
|
+
CGFloat detent = [self detentValueForIndex:index];
|
|
313
331
|
|
|
314
|
-
if ([self.delegate respondsToSelector:@selector(viewControllerDidDrag:index:position:)]) {
|
|
315
|
-
[self.delegate viewControllerDidDrag:gesture.state index:index position:self.currentPosition];
|
|
332
|
+
if ([self.delegate respondsToSelector:@selector(viewControllerDidDrag:index:position:detent:)]) {
|
|
333
|
+
[self.delegate viewControllerDidDrag:gesture.state index:index position:self.currentPosition detent:detent];
|
|
316
334
|
}
|
|
317
335
|
|
|
318
336
|
switch (gesture.state) {
|
|
@@ -325,7 +343,12 @@
|
|
|
325
343
|
case UIGestureRecognizerStateEnded:
|
|
326
344
|
case UIGestureRecognizerStateCancelled: {
|
|
327
345
|
_isDragging = NO;
|
|
328
|
-
|
|
346
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
347
|
+
// Store resolved position when drag ends
|
|
348
|
+
[self storeResolvedPositionForIndex:[self currentDetentIndex]];
|
|
349
|
+
|
|
350
|
+
[self emitChangePositionDelegateWithPosition:self.currentPosition realtime:NO];
|
|
351
|
+
});
|
|
329
352
|
break;
|
|
330
353
|
}
|
|
331
354
|
default:
|
|
@@ -348,68 +371,130 @@
|
|
|
348
371
|
}
|
|
349
372
|
}
|
|
350
373
|
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
if (
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
374
|
+
/// Stores the current position for the given detent index
|
|
375
|
+
- (void)storeResolvedPositionForIndex:(NSInteger)index {
|
|
376
|
+
if (index >= 0 && index < (NSInteger)_resolvedDetentPositions.count) {
|
|
377
|
+
_resolvedDetentPositions[index] = @(self.currentPosition);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
357
380
|
|
|
358
|
-
|
|
359
|
-
|
|
381
|
+
/// Returns the estimated Y position for a detent index, using stored positions when available
|
|
382
|
+
- (CGFloat)estimatedPositionForIndex:(NSInteger)index {
|
|
383
|
+
if (index < 0 || index >= (NSInteger)_resolvedDetentPositions.count)
|
|
384
|
+
return 0;
|
|
360
385
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
// Interpolate: 0 at firstDetentValue, -1 at 0
|
|
365
|
-
if (firstDetentValue <= 0)
|
|
366
|
-
return 0;
|
|
367
|
-
CGFloat progress = currentDetent / firstDetentValue;
|
|
368
|
-
return progress - 1;
|
|
386
|
+
CGFloat storedPos = [_resolvedDetentPositions[index] doubleValue];
|
|
387
|
+
if (storedPos > 0) {
|
|
388
|
+
return storedPos;
|
|
369
389
|
}
|
|
370
390
|
|
|
371
|
-
//
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
CGFloat nextDetentValue = [self detentValueForIndex:i + 1];
|
|
391
|
+
// Estimate based on detent value and known offset from first resolved position
|
|
392
|
+
CGFloat detentValue = [self detentValueForIndex:index];
|
|
393
|
+
CGFloat basePosition = self.screenHeight - (detentValue * self.screenHeight);
|
|
375
394
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
CGFloat
|
|
382
|
-
|
|
395
|
+
// Find a resolved position to calculate offset
|
|
396
|
+
for (NSInteger i = 0; i < (NSInteger)_resolvedDetentPositions.count; i++) {
|
|
397
|
+
CGFloat pos = [_resolvedDetentPositions[i] doubleValue];
|
|
398
|
+
if (pos > 0) {
|
|
399
|
+
CGFloat knownDetent = [self detentValueForIndex:i];
|
|
400
|
+
CGFloat expectedPos = self.screenHeight - (knownDetent * self.screenHeight);
|
|
401
|
+
CGFloat offset = pos - expectedPos;
|
|
402
|
+
return basePosition + offset;
|
|
383
403
|
}
|
|
384
404
|
}
|
|
385
405
|
|
|
386
|
-
return
|
|
406
|
+
return basePosition;
|
|
387
407
|
}
|
|
388
408
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
409
|
+
/// Finds the segment containing the given position and returns the lower index and progress within that segment.
|
|
410
|
+
/// Returns YES if a segment was found, NO otherwise. When NO, `outIndex` contains the boundary index.
|
|
411
|
+
- (BOOL)findSegmentForPosition:(CGFloat)position outIndex:(NSInteger *)outIndex outProgress:(CGFloat *)outProgress {
|
|
412
|
+
NSInteger count = _resolvedDetentPositions.count;
|
|
413
|
+
if (count == 0) {
|
|
414
|
+
*outIndex = -1;
|
|
415
|
+
*outProgress = 0;
|
|
416
|
+
return NO;
|
|
417
|
+
}
|
|
392
418
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
419
|
+
if (count == 1) {
|
|
420
|
+
*outIndex = 0;
|
|
421
|
+
*outProgress = 0;
|
|
422
|
+
return NO;
|
|
423
|
+
}
|
|
396
424
|
|
|
397
|
-
|
|
398
|
-
CGFloat
|
|
399
|
-
CGFloat lastDetentValue = [self detentValueForIndex:count - 1];
|
|
425
|
+
CGFloat firstPos = [self estimatedPositionForIndex:0];
|
|
426
|
+
CGFloat lastPos = [self estimatedPositionForIndex:count - 1];
|
|
400
427
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
428
|
+
// Below first detent (position > firstPos means sheet is smaller)
|
|
429
|
+
if (position > firstPos) {
|
|
430
|
+
CGFloat range = self.screenHeight - firstPos;
|
|
431
|
+
*outIndex = -1;
|
|
432
|
+
*outProgress = range > 0 ? (position - firstPos) / range : 0;
|
|
433
|
+
return NO;
|
|
406
434
|
}
|
|
407
435
|
|
|
408
|
-
|
|
409
|
-
|
|
436
|
+
// Above last detent
|
|
437
|
+
if (position < lastPos) {
|
|
438
|
+
*outIndex = count - 1;
|
|
439
|
+
*outProgress = 0;
|
|
440
|
+
return NO;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
// Find segment (positions decrease as index increases)
|
|
444
|
+
for (NSInteger i = 0; i < count - 1; i++) {
|
|
445
|
+
CGFloat pos = [self estimatedPositionForIndex:i];
|
|
446
|
+
CGFloat nextPos = [self estimatedPositionForIndex:i + 1];
|
|
447
|
+
|
|
448
|
+
if (position <= pos && position >= nextPos) {
|
|
449
|
+
CGFloat range = pos - nextPos;
|
|
450
|
+
*outIndex = i;
|
|
451
|
+
*outProgress = range > 0 ? (pos - position) / range : 0;
|
|
452
|
+
return YES;
|
|
453
|
+
}
|
|
410
454
|
}
|
|
411
455
|
|
|
412
|
-
|
|
456
|
+
*outIndex = count - 1;
|
|
457
|
+
*outProgress = 0;
|
|
458
|
+
return NO;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
- (CGFloat)interpolatedIndexForPosition:(CGFloat)position {
|
|
462
|
+
NSInteger index;
|
|
463
|
+
CGFloat progress;
|
|
464
|
+
BOOL found = [self findSegmentForPosition:position outIndex:&index outProgress:&progress];
|
|
465
|
+
|
|
466
|
+
if (!found) {
|
|
467
|
+
if (index == -1) {
|
|
468
|
+
// Below first detent - return negative progress
|
|
469
|
+
return -progress;
|
|
470
|
+
}
|
|
471
|
+
// At or beyond boundary
|
|
472
|
+
return index;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// Within a segment - interpolate
|
|
476
|
+
return index + fmax(0, fmin(1, progress));
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
- (CGFloat)interpolatedDetentForPosition:(CGFloat)position {
|
|
480
|
+
NSInteger index;
|
|
481
|
+
CGFloat progress;
|
|
482
|
+
BOOL found = [self findSegmentForPosition:position outIndex:&index outProgress:&progress];
|
|
483
|
+
|
|
484
|
+
if (!found) {
|
|
485
|
+
if (index == -1) {
|
|
486
|
+
// Below first detent
|
|
487
|
+
CGFloat firstDetent = [self detentValueForIndex:0];
|
|
488
|
+
return fmax(0, firstDetent * (1 - progress));
|
|
489
|
+
}
|
|
490
|
+
// At or beyond boundary
|
|
491
|
+
return [self detentValueForIndex:index];
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
// Within a segment - interpolate between detent values
|
|
495
|
+
CGFloat detent = [self detentValueForIndex:index];
|
|
496
|
+
CGFloat nextDetent = [self detentValueForIndex:index + 1];
|
|
497
|
+
return detent + progress * (nextDetent - detent);
|
|
413
498
|
}
|
|
414
499
|
|
|
415
500
|
- (CGFloat)detentValueForIndex:(NSInteger)index {
|
|
@@ -425,73 +510,6 @@
|
|
|
425
510
|
return 0;
|
|
426
511
|
}
|
|
427
512
|
|
|
428
|
-
/**
|
|
429
|
-
* Sets up position tracking during view controller transitions using a fake view.
|
|
430
|
-
*
|
|
431
|
-
* This uses a hidden "fake" view added to the container that animates alongside
|
|
432
|
-
* the presented view. By observing the presentation layer, we can track smooth
|
|
433
|
-
* position changes during native transition animations.
|
|
434
|
-
*/
|
|
435
|
-
- (void)setupTransitionPositionTracking {
|
|
436
|
-
if (self.transitionCoordinator == nil)
|
|
437
|
-
return;
|
|
438
|
-
|
|
439
|
-
_isTransitioning = YES;
|
|
440
|
-
|
|
441
|
-
UIView *containerView = self.sheetPresentationController.containerView;
|
|
442
|
-
UIView *presentedView = self.presentedView;
|
|
443
|
-
|
|
444
|
-
if (!containerView || !presentedView)
|
|
445
|
-
return;
|
|
446
|
-
|
|
447
|
-
CGRect frame = presentedView.frame;
|
|
448
|
-
BOOL isPresenting = self.isBeingPresented;
|
|
449
|
-
|
|
450
|
-
// Set initial position: presenting starts from bottom, dismissing from current
|
|
451
|
-
frame.origin.y = isPresenting ? self.screenHeight : presentedView.frame.origin.y;
|
|
452
|
-
_fakeTransitionView.frame = frame;
|
|
453
|
-
|
|
454
|
-
auto animation = ^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
|
|
455
|
-
[[context containerView] addSubview:self->_fakeTransitionView];
|
|
456
|
-
|
|
457
|
-
CGRect finalFrame = presentedView.frame;
|
|
458
|
-
finalFrame.origin.y = presentedView.frame.origin.y;
|
|
459
|
-
self->_fakeTransitionView.frame = finalFrame;
|
|
460
|
-
|
|
461
|
-
// Track position at screen refresh rate via display link
|
|
462
|
-
self->_displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(trackTransitionPosition:)];
|
|
463
|
-
[self->_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
|
|
464
|
-
};
|
|
465
|
-
|
|
466
|
-
[self.transitionCoordinator
|
|
467
|
-
animateAlongsideTransition:animation
|
|
468
|
-
completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
|
|
469
|
-
[self->_displayLink invalidate];
|
|
470
|
-
self->_displayLink = nil;
|
|
471
|
-
[self->_fakeTransitionView removeFromSuperview];
|
|
472
|
-
self->_isTransitioning = NO;
|
|
473
|
-
}];
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
- (void)trackTransitionPosition:(CADisplayLink *)displayLink {
|
|
477
|
-
UIView *presentedView = self.presentedView;
|
|
478
|
-
|
|
479
|
-
if (_isDragging || !_fakeTransitionView || !presentedView)
|
|
480
|
-
return;
|
|
481
|
-
|
|
482
|
-
// Presentation layer contains in-flight animated values (not final/target values)
|
|
483
|
-
CALayer *presentationLayer = _fakeTransitionView.layer.presentationLayer;
|
|
484
|
-
|
|
485
|
-
if (presentationLayer) {
|
|
486
|
-
CGFloat transitioningPosition = presentationLayer.frame.origin.y;
|
|
487
|
-
CGFloat staticPosition = _fakeTransitionView.frame.origin.y;
|
|
488
|
-
|
|
489
|
-
if (fabs(staticPosition - transitioningPosition) > 0.01) {
|
|
490
|
-
[self emitChangePositionDelegateWithPosition:transitioningPosition realtime:YES];
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
|
|
495
513
|
#pragma mark - Sheet Configuration
|
|
496
514
|
|
|
497
515
|
- (void)setupSheetDetents {
|
|
@@ -500,6 +518,7 @@
|
|
|
500
518
|
return;
|
|
501
519
|
|
|
502
520
|
NSMutableArray<UISheetPresentationControllerDetent *> *detents = [NSMutableArray array];
|
|
521
|
+
[_resolvedDetentPositions removeAllObjects];
|
|
503
522
|
|
|
504
523
|
CGFloat autoHeight = [self.contentHeight floatValue] + [self.headerHeight floatValue];
|
|
505
524
|
|
|
@@ -509,6 +528,8 @@
|
|
|
509
528
|
withAutoHeight:autoHeight
|
|
510
529
|
atIndex:index];
|
|
511
530
|
[detents addObject:sheetDetent];
|
|
531
|
+
// Initialize with placeholder - will be updated when sheet settles at each detent
|
|
532
|
+
[_resolvedDetentPositions addObject:@(0)];
|
|
512
533
|
}
|
|
513
534
|
|
|
514
535
|
sheet.detents = detents;
|
|
@@ -632,6 +653,16 @@
|
|
|
632
653
|
[self applyActiveDetent];
|
|
633
654
|
}
|
|
634
655
|
|
|
656
|
+
- (void)resizeToDetentIndex:(NSInteger)index {
|
|
657
|
+
if (index == _activeDetentIndex) {
|
|
658
|
+
return;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
_pendingDetentIndex = index;
|
|
662
|
+
_activeDetentIndex = index;
|
|
663
|
+
[self applyActiveDetent];
|
|
664
|
+
}
|
|
665
|
+
|
|
635
666
|
- (void)setupSheetProps {
|
|
636
667
|
UISheetPresentationController *sheet = self.sheetPresentationController;
|
|
637
668
|
if (!sheet) {
|
|
@@ -686,9 +717,14 @@
|
|
|
686
717
|
|
|
687
718
|
- (void)sheetPresentationControllerDidChangeSelectedDetentIdentifier:
|
|
688
719
|
(UISheetPresentationController *)sheetPresentationController {
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
720
|
+
if ([self.delegate respondsToSelector:@selector(viewControllerDidChangeDetent:position:detent:)]) {
|
|
721
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
722
|
+
NSInteger index = [self currentDetentIndex];
|
|
723
|
+
if (index >= 0) {
|
|
724
|
+
CGFloat detent = [self detentValueForIndex:index];
|
|
725
|
+
[self.delegate viewControllerDidChangeDetent:index position:self.currentPosition detent:detent];
|
|
726
|
+
}
|
|
727
|
+
});
|
|
692
728
|
}
|
|
693
729
|
}
|
|
694
730
|
|
package/lib/module/TrueSheet.js
CHANGED
|
@@ -13,6 +13,9 @@ const LINKING_ERROR = `The package '@lodev09/react-native-true-sheet' doesn't se
|
|
|
13
13
|
ios: "- You have run 'pod install'\n",
|
|
14
14
|
default: ''
|
|
15
15
|
}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n' + '- You are using the new architecture (Fabric)\n';
|
|
16
|
+
|
|
17
|
+
// Material Design 3 minimum touch target
|
|
18
|
+
const ANDROID_HITBOX_HEIGHT = 48;
|
|
16
19
|
if (!TrueSheetModule) {
|
|
17
20
|
throw new Error(LINKING_ERROR);
|
|
18
21
|
}
|
|
@@ -295,7 +298,7 @@ export class TrueSheet extends PureComponent {
|
|
|
295
298
|
android: styles.scrollableAndroidContainer
|
|
296
299
|
});
|
|
297
300
|
const contentStyle = this.props.scrollable && Platform.select({
|
|
298
|
-
android: styles.
|
|
301
|
+
android: styles.scrollableAndroidContent
|
|
299
302
|
});
|
|
300
303
|
return /*#__PURE__*/_jsx(TrueSheetViewNativeComponent, {
|
|
301
304
|
...rest,
|
|
@@ -368,7 +371,7 @@ const styles = StyleSheet.create({
|
|
|
368
371
|
right: 0,
|
|
369
372
|
bottom: 0
|
|
370
373
|
},
|
|
371
|
-
|
|
374
|
+
scrollableAndroidContent: {
|
|
372
375
|
flexGrow: 1,
|
|
373
376
|
flexBasis: 0
|
|
374
377
|
},
|
|
@@ -382,7 +385,7 @@ const styles = StyleSheet.create({
|
|
|
382
385
|
top: 0,
|
|
383
386
|
left: 0,
|
|
384
387
|
right: 0,
|
|
385
|
-
height:
|
|
388
|
+
height: ANDROID_HITBOX_HEIGHT
|
|
386
389
|
}
|
|
387
390
|
});
|
|
388
391
|
//# sourceMappingURL=TrueSheet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PureComponent","createRef","isValidElement","createElement","TrueSheetViewNativeComponent","TrueSheetContainerViewNativeComponent","TrueSheetContentViewNativeComponent","TrueSheetHeaderViewNativeComponent","TrueSheetFooterViewNativeComponent","TrueSheetModule","Platform","processColor","StyleSheet","findNodeHandle","View","jsx","_jsx","jsxs","_jsxs","LINKING_ERROR","select","ios","default","Error","TrueSheet","displayName","instances","presentationResolver","constructor","props","nativeRef","validateDetents","shouldRenderImmediately","initialDetentIndex","undefined","state","shouldRenderNativeView","onMount","bind","onWillDismiss","onDidDismiss","onWillPresent","onDidPresent","onDetentChange","onDragBegin","onDragChange","onDragEnd","onPositionChange","onWillFocus","onDidFocus","onWillBlur","onDidBlur","detents","length","console","warn","forEach","detent","index","detentsLength","Math","min","getInstance","name","instance","handle","nodeHandle","current","present","dismiss","resize","registerInstance","unregisterInstance","event","setState","Promise","resolve","presentByRef","dismissByRef","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","backgroundColor","dismissible","draggable","grabber","dimmed","initialDetentAnimated","keyboardMode","dimmedDetentIndex","blurTint","cornerRadius","maxHeight","edgeToEdgeFullScreen","scrollable","pageSizing","children","style","header","footer","rest","resolvedDetents","slice","map","containerStyle","android","styles","scrollableAndroidContainer","contentStyle","scrollableContent","ref","sheetView","background","OS","collapsable","grabberHitbox","create","zIndex","position","top","left","right","bottom","flexGrow","flexBasis","height"],"sourceRoot":"../../src","sources":["TrueSheet.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["PureComponent","createRef","isValidElement","createElement","TrueSheetViewNativeComponent","TrueSheetContainerViewNativeComponent","TrueSheetContentViewNativeComponent","TrueSheetHeaderViewNativeComponent","TrueSheetFooterViewNativeComponent","TrueSheetModule","Platform","processColor","StyleSheet","findNodeHandle","View","jsx","_jsx","jsxs","_jsxs","LINKING_ERROR","select","ios","default","ANDROID_HITBOX_HEIGHT","Error","TrueSheet","displayName","instances","presentationResolver","constructor","props","nativeRef","validateDetents","shouldRenderImmediately","initialDetentIndex","undefined","state","shouldRenderNativeView","onMount","bind","onWillDismiss","onDidDismiss","onWillPresent","onDidPresent","onDetentChange","onDragBegin","onDragChange","onDragEnd","onPositionChange","onWillFocus","onDidFocus","onWillBlur","onDidBlur","detents","length","console","warn","forEach","detent","index","detentsLength","Math","min","getInstance","name","instance","handle","nodeHandle","current","present","dismiss","resize","registerInstance","unregisterInstance","event","setState","Promise","resolve","presentByRef","dismissByRef","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","backgroundColor","dismissible","draggable","grabber","dimmed","initialDetentAnimated","keyboardMode","dimmedDetentIndex","blurTint","cornerRadius","maxHeight","edgeToEdgeFullScreen","scrollable","pageSizing","children","style","header","footer","rest","resolvedDetents","slice","map","containerStyle","android","styles","scrollableAndroidContainer","contentStyle","scrollableAndroidContent","ref","sheetView","background","OS","collapsable","grabberHitbox","create","zIndex","position","top","left","right","bottom","flexGrow","flexBasis","height"],"sourceRoot":"../../src","sources":["TrueSheet.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrueSheet.d.ts","sourceRoot":"","sources":["../../../src/TrueSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAGb,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,cAAc,EAef,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"TrueSheet.d.ts","sourceRoot":"","sources":["../../../src/TrueSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAGb,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,cAAc,EAef,MAAM,mBAAmB,CAAC;AA2B3B,UAAU,cAAc;IACtB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,qBAAa,SAAU,SAAQ,aAAa,CAAC,cAAc,EAAE,cAAc,CAAC;IAC1E,WAAW,SAAe;IAE1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IAExD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAEtE;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAA6B;gBAE7C,KAAK,EAAE,cAAc;IA+BjC,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,OAAO,KAAK,MAAM,GAOjB;IAED;;;;;;OAMG;WACiB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3E;;;;;OAKG;WACiB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxD;;;;;;OAMG;WACiB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStE,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAIjB;;;OAGG;IACU,OAAO,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtD;;;OAGG;IACU,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,iBAAiB,IAAI,IAAI;IAIzB,kBAAkB,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IASnD,oBAAoB,IAAI,IAAI;IAO5B,MAAM,IAAI,SAAS;CA2GpB"}
|
package/package.json
CHANGED
package/src/TrueSheet.tsx
CHANGED
|
@@ -42,6 +42,9 @@ const LINKING_ERROR =
|
|
|
42
42
|
'- You are not using Expo Go\n' +
|
|
43
43
|
'- You are using the new architecture (Fabric)\n';
|
|
44
44
|
|
|
45
|
+
// Material Design 3 minimum touch target
|
|
46
|
+
const ANDROID_HITBOX_HEIGHT = 48;
|
|
47
|
+
|
|
45
48
|
if (!TrueSheetModule) {
|
|
46
49
|
throw new Error(LINKING_ERROR);
|
|
47
50
|
}
|
|
@@ -377,7 +380,7 @@ export class TrueSheet extends PureComponent<TrueSheetProps, TrueSheetState> {
|
|
|
377
380
|
const contentStyle =
|
|
378
381
|
this.props.scrollable &&
|
|
379
382
|
Platform.select({
|
|
380
|
-
android: styles.
|
|
383
|
+
android: styles.scrollableAndroidContent,
|
|
381
384
|
});
|
|
382
385
|
|
|
383
386
|
return (
|
|
@@ -431,7 +434,6 @@ export class TrueSheet extends PureComponent<TrueSheetProps, TrueSheetState> {
|
|
|
431
434
|
{isValidElement(footer) ? footer : createElement(footer)}
|
|
432
435
|
</TrueSheetFooterViewNativeComponent>
|
|
433
436
|
)}
|
|
434
|
-
{/* Grabber hitbox for Android - allows dragging the sheet from the top area */}
|
|
435
437
|
{Platform.OS === 'android' && grabber && draggable && (
|
|
436
438
|
<View collapsable={false} style={styles.grabberHitbox} />
|
|
437
439
|
)}
|
|
@@ -460,7 +462,7 @@ const styles = StyleSheet.create({
|
|
|
460
462
|
right: 0,
|
|
461
463
|
bottom: 0,
|
|
462
464
|
},
|
|
463
|
-
|
|
465
|
+
scrollableAndroidContent: {
|
|
464
466
|
flexGrow: 1,
|
|
465
467
|
flexBasis: 0,
|
|
466
468
|
},
|
|
@@ -474,6 +476,6 @@ const styles = StyleSheet.create({
|
|
|
474
476
|
top: 0,
|
|
475
477
|
left: 0,
|
|
476
478
|
right: 0,
|
|
477
|
-
height:
|
|
479
|
+
height: ANDROID_HITBOX_HEIGHT,
|
|
478
480
|
},
|
|
479
481
|
});
|