in ComponentKit/Core/CKBuildComponent.mm [29:63]
static auto boundsAnimationFromPreviousScopeRoot(CKComponentScopeRoot *newRoot,
CKComponentScopeRoot *previousRoot) -> CKComponentBoundsAnimation
{
NSMapTable *const uniqueIdentifierToOldComponent = [NSMapTable strongToStrongObjectsMapTable];
[previousRoot
enumerateComponentsMatchingPredicate:&CKComponentBoundsAnimationPredicate
block:^(id<CKComponentProtocol> component) {
CKComponent *oldComponent = (CKComponent *)component;
id uniqueIdentifier = [oldComponent uniqueIdentifier];
if (uniqueIdentifier) {
[uniqueIdentifierToOldComponent setObject:oldComponent forKey:uniqueIdentifier];
}
}];
__block CKComponentBoundsAnimation boundsAnimation {};
[newRoot
enumerateComponentsMatchingPredicate:&CKComponentBoundsAnimationPredicate
block:^(id<CKComponentProtocol> component) {
CKComponent *newComponent = (CKComponent *)component;
id uniqueIdentifier = [newComponent uniqueIdentifier];
if (uniqueIdentifier) {
CKComponent *oldComponent = [uniqueIdentifierToOldComponent objectForKey:uniqueIdentifier];
if (oldComponent) {
auto const ba = [newComponent boundsAnimationFromPreviousComponent:oldComponent];
if (ba.duration != 0) {
boundsAnimation = ba;
#if CK_ASSERTIONS_ENABLED
boundsAnimation.component = newComponent;
#endif
}
}
}
}];
return boundsAnimation;
}