diff --git a/Source/ASDisplayNode.mm b/Source/ASDisplayNode.mm index b96a77477..09f112102 100644 --- a/Source/ASDisplayNode.mm +++ b/Source/ASDisplayNode.mm @@ -255,9 +255,16 @@ + (void)initialize } #if !AS_INITIALIZE_FRAMEWORK_MANUALLY -__attribute__((constructor)) static void ASLoadFrameworkInitializer(void) +__attribute__((constructor)) static void ASLoadFrameworkInitializerOnConstructor(void) { - ASInitializeFrameworkMainThread(); + ASInitializeFrameworkMainThreadOnConstructor(); +} +#endif + +#if !AS_INITIALIZE_FRAMEWORK_MANUALLY +__attribute__((destructor)) static void ASLoadFrameworkInitializerOnDestructor(void) +{ + ASInitializeFrameworkMainThreadOnDestructor(); } #endif diff --git a/Source/Details/_ASDisplayLayer.mm b/Source/Details/_ASDisplayLayer.mm index 4e8569d15..e7f7a9a15 100644 --- a/Source/Details/_ASDisplayLayer.mm +++ b/Source/Details/_ASDisplayLayer.mm @@ -13,6 +13,7 @@ #import #import #import +#import @implementation _ASDisplayLayer { @@ -125,6 +126,8 @@ + (id)defaultValueForKey:(NSString *)key return @YES; } else if ([key isEqualToString:@"opaque"]) { return @YES; + } else if ([key isEqualToString:@"contentsScale"]) { + return @(ASScreenScale()); } else { return [super defaultValueForKey:key]; } diff --git a/Source/Private/ASInternalHelpers.h b/Source/Private/ASInternalHelpers.h index 29fa26897..ed1c55218 100644 --- a/Source/Private/ASInternalHelpers.h +++ b/Source/Private/ASInternalHelpers.h @@ -17,7 +17,8 @@ NS_ASSUME_NONNULL_BEGIN -ASDK_EXTERN void ASInitializeFrameworkMainThread(void); +ASDK_EXTERN void ASInitializeFrameworkMainThreadOnConstructor(void); +ASDK_EXTERN void ASInitializeFrameworkMainThreadOnDestructor(void); ASDK_EXTERN BOOL ASDefaultAllowsGroupOpacity(void); ASDK_EXTERN BOOL ASDefaultAllowsEdgeAntialiasing(void); diff --git a/Source/Private/ASInternalHelpers.mm b/Source/Private/ASInternalHelpers.mm index 4d6e1fde8..c815abd5b 100644 --- a/Source/Private/ASInternalHelpers.mm +++ b/Source/Private/ASInternalHelpers.mm @@ -61,7 +61,19 @@ void _ASInitializeSignpostObservers(void) } #endif // AS_SIGNPOST_ENABLE -void ASInitializeFrameworkMainThread(void) +void ASInitializeFrameworkMainThreadOnConstructor(void) +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + ASDisplayNodeCAssertMainThread(); + ASNotifyInitialized(); +#if AS_SIGNPOST_ENABLE + _ASInitializeSignpostObservers(); +#endif + }); +} + +void ASInitializeFrameworkMainThreadOnDestructor(void) { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ @@ -74,10 +86,6 @@ void ASInitializeFrameworkMainThread(void) allowsGroupOpacityFromUIKitOrNil = @(layer.allowsGroupOpacity); allowsEdgeAntialiasingFromUIKitOrNil = @(layer.allowsEdgeAntialiasing); } - ASNotifyInitialized(); -#if AS_SIGNPOST_ENABLE - _ASInitializeSignpostObservers(); -#endif }); } diff --git a/Tests/ASBridgedPropertiesTests.mm b/Tests/ASBridgedPropertiesTests.mm index 1034cc3a7..8880ac1c8 100644 --- a/Tests/ASBridgedPropertiesTests.mm +++ b/Tests/ASBridgedPropertiesTests.mm @@ -152,14 +152,8 @@ - (void)testThatSettingTintColorSetNeedsDisplayOnView ASDisplayNode *node = [[ASDisplayNode alloc] initWithViewClass:ASBridgedPropertiesTestView.class]; ASBridgedPropertiesTestView *view = (ASBridgedPropertiesTestView *)node.view; NSUInteger initialSetNeedsDisplayCount = view.setNeedsDisplayCount; -#if AS_AT_LEAST_IOS13 - // This is called an extra time on iOS13 for unknown reasons. Need to Investigate. - if (@available(iOS 13.0, *)) { - XCTAssertEqual(initialSetNeedsDisplayCount, 2); - } else { - XCTAssertEqual(initialSetNeedsDisplayCount, 1); - } -#endif + + XCTAssertEqual(initialSetNeedsDisplayCount, 1); ASDispatchSyncOnOtherThread(^{ node.tintColor = UIColor.orangeColor; diff --git a/Tests/ASDisplayNodeTests.mm b/Tests/ASDisplayNodeTests.mm index edf622c71..f4287486e 100644 --- a/Tests/ASDisplayNodeTests.mm +++ b/Tests/ASDisplayNodeTests.mm @@ -472,7 +472,7 @@ - (void)checkValuesMatchDefaults:(ASDisplayNode *)node isLayerBacked:(BOOL)isLay XCTAssertTrue(CGRectEqualToRect(CGRectZero, node.frame), @"default frame broken %@", hasLoadedView); XCTAssertTrue(CGPointEqualToPoint(CGPointZero, node.position), @"default position broken %@", hasLoadedView); XCTAssertEqual((CGFloat)0.0, node.zPosition, @"default zPosition broken %@", hasLoadedView); - XCTAssertEqual(node.isNodeLoaded && !isLayerBacked ? 2.0f : 1.0f, node.contentsScale, @"default contentsScale broken %@", hasLoadedView); + XCTAssertEqual(node.isNodeLoaded && isLayerBacked ? 2.0f : 1.0f, node.contentsScale, @"default contentsScale broken %@", hasLoadedView); XCTAssertEqual([UIScreen mainScreen].scale, node.contentsScaleForDisplay, @"default contentsScaleForDisplay broken %@", hasLoadedView); XCTAssertTrue(CATransform3DEqualToTransform(CATransform3DIdentity, node.transform), @"default transform broken %@", hasLoadedView); XCTAssertTrue(CATransform3DEqualToTransform(CATransform3DIdentity, node.subnodeTransform), @"default subnodeTransform broken %@", hasLoadedView);