Use different contact avatar assets depending on size of output.

pull/1/head
Matthew Chen 7 years ago
parent 4ea6d72008
commit 408008d3e7

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "contact-avatar-84.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -100,9 +100,8 @@ NS_ASSUME_NONNULL_BEGIN
- (nullable UIImage *)buildDefaultImage - (nullable UIImage *)buildDefaultImage
{ {
UIImage *_Nullable cachedAvatar = nil; UIImage *_Nullable cachedAvatar =
[OWSContactAvatarBuilder.contactsManager.avatarCache imageForKey:self.cacheKey [OWSContactAvatarBuilder.contactsManager.avatarCache imageForKey:self.cacheKey diameter:(CGFloat)self.diameter];
diameter:(CGFloat)self.diameter];
if (cachedAvatar) { if (cachedAvatar) {
return cachedAvatar; return cachedAvatar;
} }
@ -135,11 +134,18 @@ NS_ASSUME_NONNULL_BEGIN
if (initials.length == 0) { if (initials.length == 0) {
// We don't have a name for this contact, so we can't make an "initials" image. // We don't have a name for this contact, so we can't make an "initials" image.
UIImage *icon = [UIImage imageNamed:@"contact-avatar"]; UIImage *icon;
if (self.diameter > kStandardAvatarSize) {
icon = [UIImage imageNamed:@"contact-avatar-1024"];
} else {
icon = [UIImage imageNamed:@"contact-avatar-84"];
}
CGFloat assetWidthPixels = CGImageGetWidth(icon.CGImage);
// The contact-avatar asset is designed to be 28pt if the avatar is kStandardAvatarSize. // The contact-avatar asset is designed to be 28pt if the avatar is kStandardAvatarSize.
// Adjust its size to reflect the actual output diameter. // Adjust its size to reflect the actual output diameter.
// We use an oversize 1024px version of the asset to ensure quality results for larger avatars. // We use an oversize 1024px version of the asset to ensure quality results for larger avatars.
CGFloat scaling = (self.diameter / (CGFloat)kStandardAvatarSize) * (28 / 1024.f); CGFloat scaling = (self.diameter / (CGFloat)kStandardAvatarSize) * (28 / assetWidthPixels);
CGSize iconSize = CGSizeScale(icon.size, scaling); CGSize iconSize = CGSizeScale(icon.size, scaling);
image = image =
[OWSAvatarBuilder avatarImageWithIcon:icon iconSize:iconSize backgroundColor:color diameter:self.diameter]; [OWSAvatarBuilder avatarImageWithIcon:icon iconSize:iconSize backgroundColor:color diameter:self.diameter];

Loading…
Cancel
Save