Skip to content

Instantly share code, notes, and snippets.

@JunyiXie
Last active November 7, 2019 14:37
Show Gist options
  • Save JunyiXie/20ede9a8e630466f34fb6311ff1628b6 to your computer and use it in GitHub Desktop.
Save JunyiXie/20ede9a8e630466f34fb6311ff1628b6 to your computer and use it in GitHub Desktop.
DynamicImage
+ (instancetype)imageWithLightImageBlock:(UIImage *(^)(void))lightImageBlock
darkImageBlock:(UIImage *(^)(void))darkImageBlock
{
__block UIImage *image = nil;
if (@available(iOS 13.0, *)) {
UITraitCollection *const scaleTraitCollection = [UITraitCollection currentTraitCollection];
UITraitCollection *const lightUnscaledTraitCollection = [UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight];
UITraitCollection *const darkUnscaledTraitCollection = [UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark];
UITraitCollection *const lightScaledTraitCollection = [UITraitCollection traitCollectionWithTraitsFromCollections:@[scaleTraitCollection, lightUnscaledTraitCollection]];
UITraitCollection *const darkScaledTraitCollection = [UITraitCollection traitCollectionWithTraitsFromCollections:@[scaleTraitCollection, darkUnscaledTraitCollection]];
[lightScaledTraitCollection performAsCurrentTraitCollection:^{
image = lightImageBlock();
image = [image imageWithConfiguration:[image.configuration configurationWithTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight]]];
}];
__block UIImage *darkImage;
[darkScaledTraitCollection performAsCurrentTraitCollection:^{
darkImage = darkImageBlock();
darkImage = [darkImage imageWithConfiguration:[darkImage.configuration configurationWithTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark]]];
}];
[image.imageAsset registerImage:darkImage withTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark]];
} else {
image = lightImageBlock();
}
return image;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment