1
- import { Color , EventData , GridLayout , ImageSource , Utils , View } from '@nativescript/core' ;
1
+ import { Color , EventData , GridLayout , ImageSource , Screen , Utils , View } from '@nativescript/core' ;
2
2
import { isNullOrUndefined } from '@nativescript/core/utils/types' ;
3
3
import {
4
4
ActiveBuildingEvent ,
@@ -47,6 +47,11 @@ import {
47
47
} from '.' ;
48
48
import { bearingProperty , JointType , latProperty , lngProperty , MapType , MapViewBase , tiltProperty , zoomProperty } from './common' ;
49
49
import { deserialize , intoNativeCircleOptions , intoNativeGroundOverlayOptions , intoNativeMarkerOptions , intoNativePolygonOptions , intoNativePolylineOptions , serialize } from './utils' ;
50
+ import { layout } from '@nativescript/core/utils' ;
51
+
52
+ const native_ = Symbol ( '[[native]]' ) ;
53
+
54
+ declare const NSCCustomInfoView ;
50
55
51
56
export class CameraUpdate implements ICameraUpdate {
52
57
_native : GMSCameraUpdate ;
@@ -443,21 +448,39 @@ class GMSMapViewDelegateImpl extends NSObject implements GMSMapViewDelegate {
443
448
owner . notify ( event ) ;
444
449
445
450
if ( event . view instanceof View ) {
446
- if ( ! event . view . parent && ! event . view ?. nativeView ) {
447
- owner . _addView ( event . view ) ;
448
- }
449
- if ( event . view . nativeView && ! ( < any > marker ) . _view ) {
450
- ( < any > marker ) . _view = UIView . new ( ) ;
451
- }
452
- const parent = event . view . nativeView ?. superview ;
453
- if ( event . view . nativeView && parent !== ( < any > marker ) . _view ) {
454
- if ( parent ) {
455
- event . view . nativeView . removeFromSuperview ( ) ;
451
+ let parent = marker [ native_ ] ;
452
+ let container = ( < any > marker ) . _view as never as GridLayout ;
453
+ if ( ! parent ) {
454
+ parent = NSCCustomInfoView . new ( ) ;
455
+ container = new GridLayout ( ) ;
456
+ parent . backgroundColor = UIColor . clearColor ;
457
+ ( < any > marker ) . _view = container ;
458
+ marker [ native_ ] = parent ;
459
+ container . _setupAsRootView ( { } ) ;
460
+ container . _setupUI ( { } ) ;
461
+ container . callLoaded ( ) ;
462
+ parent . addSubview ( container . nativeView ) ;
463
+ } else {
464
+ if ( event . view . parent !== container ) {
465
+ container . removeChildren ( ) ;
456
466
}
457
- const container : UIView = ( < any > marker ) . _view ;
458
- container . addSubview ( event . view . nativeView ) ;
459
467
}
460
- return ( < any > marker ) ?. _view ?? null ;
468
+
469
+ if ( ! event . view . parent ) {
470
+ container . addChild ( event . view ) ;
471
+ } else if ( event . view . parent !== container ) {
472
+ ( < GridLayout > event ?. view ?. parent ) ?. removeChild ?.( event . view ) ;
473
+ container . addChild ( event . view ) ;
474
+ }
475
+
476
+ const w = layout . makeMeasureSpec ( 500 * Screen . mainScreen . scale , layout . AT_MOST ) ;
477
+ const h = layout . makeMeasureSpec ( 500 * Screen . mainScreen . scale , layout . AT_MOST ) ;
478
+ const size = View . measureChild ( container , event . view , w , h ) ;
479
+
480
+ View . layoutChild ( container , event . view , 0 , 0 , size . measuredWidth , size . measuredHeight ) ;
481
+ parent . frame = CGRectMake ( 0 , 0 , size . measuredWidth / Screen . mainScreen . scale , size . measuredHeight / Screen . mainScreen . scale ) ;
482
+
483
+ return parent ;
461
484
} else if ( event . view instanceof UIView ) {
462
485
return event . view ;
463
486
}
@@ -478,13 +501,18 @@ class GMSMapViewDelegateImpl extends NSObject implements GMSMapViewDelegate {
478
501
owner . notify ( event ) ;
479
502
480
503
if ( event . view instanceof View ) {
504
+ let parent = marker [ native_ ] ;
481
505
let container = ( < any > marker ) . _view as never as GridLayout ;
482
- if ( ! container ) {
506
+ if ( ! parent ) {
507
+ parent = NSCCustomInfoView . new ( ) ;
483
508
container = new GridLayout ( ) ;
509
+ parent . backgroundColor = UIColor . clearColor ;
484
510
( < any > marker ) . _view = container ;
511
+ marker [ native_ ] = parent ;
485
512
container . _setupAsRootView ( { } ) ;
486
513
container . _setupUI ( { } ) ;
487
514
container . callLoaded ( ) ;
515
+ parent . addSubview ( container . nativeView ) ;
488
516
} else {
489
517
if ( event . view . parent !== container ) {
490
518
container . removeChildren ( ) ;
@@ -498,7 +526,14 @@ class GMSMapViewDelegateImpl extends NSObject implements GMSMapViewDelegate {
498
526
container . addChild ( event . view ) ;
499
527
}
500
528
501
- return event . view . nativeView ;
529
+ const w = layout . makeMeasureSpec ( 500 * Screen . mainScreen . scale , layout . AT_MOST ) ;
530
+ const h = layout . makeMeasureSpec ( 500 * Screen . mainScreen . scale , layout . AT_MOST ) ;
531
+ const size = View . measureChild ( container , event . view , w , h ) ;
532
+
533
+ View . layoutChild ( container , event . view , 0 , 0 , size . measuredWidth , size . measuredHeight ) ;
534
+ parent . frame = CGRectMake ( 0 , 0 , size . measuredWidth / Screen . mainScreen . scale , size . measuredHeight / Screen . mainScreen . scale ) ;
535
+
536
+ return parent ;
502
537
} else if ( event . view instanceof UIView ) {
503
538
return event . view ;
504
539
}
0 commit comments