Apple手表图像资产分辨率

时间:2015-02-12 10:30:28

标签: storyboard resolution apple-watch

TL; DR如何为Apple Watch准备图像?

Apple Watch有两种分辨率:

  1. 38毫米:272x340

  2. 42毫米:312x390

  3. enter image description here

    如果我有WKInterfaceButton / WKInterfaceImage的图像136x108(上图),我如何确保它在两个手表上都看起来不错?

    我已将故事板设置为任意屏幕尺寸,高度设置为"尺寸适合内容"和width设置为"相对于容器

    问题: 1)图像的分辨率是否太低(136x108)?我该如何测量高度和宽度?例如手表的高度 - 按钮的高度(如何获得此高度)=?

    2)我应该为尺寸宽度和高度属性设置什么?

    a)相对于容器适合的尺寸,还是固定的? enter image description here

    3)对于Images.xcassets,每个@ 1x @ 2x和@ 3x所需的分辨率是什么

    enter image description here

2 个答案:

答案 0 :(得分:2)

您无需找到适用于这两种尺寸的解决方案。大小类功能使您能够分别为每个大小提供单独的布局和图像资源。

回答你的问题:

  1. 太小了。准备与手表每种尺寸的显示尺寸完全匹配的图像。

  2. 您可以使用相对于容器的宽度但固定高度 - 设置每个尺寸的精确高度。

  3. 请勿使用通用图片资源类型。特别使用Apple Watch。然后,您将能够为每种尺寸提供单独的图像。并且只需要@ 2x图像。

答案 1 :(得分:0)

这样可以解决问题:

+ (UIImage*) resizeImage:(UIImage*)original withWidth:(float)newWidth withHeight:(float)newHeight{
    UIImage * originalScaled = [UIImage imageWithCGImage:original.CGImage scale:[UIScreen mainScreen].scale orientation:original.imageOrientation];

    CGSize newSize = CGSizeMake(newWidth, newHeight);

    UIGraphicsBeginImageContextWithOptions(newSize, // context size
                                           NO,      // opaque?
                                           0);      // image scale. 0 means "device screen scale"

    CGContextRef imageContext = UIGraphicsGetCurrentContext();
    CGContextSetInterpolationQuality(imageContext, kCGInterpolationHigh);
    [originalScaled drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

您的图像应该是高分辨率,因为将其转换为视网膜图像会使图像变小。你是这样做的视网膜:

scale:[UIScreen mainScreen].scale

因此,如果您的图像是136x108,您应该实例化图像并将该宽度和高度传递给该方法。手表看起来不错。