【问题标题】:UIImage imageNamed: always returns image at 1xUIImage imageNamed:总是以 1x 返回图像
【发布时间】:2015-03-30 23:18:38
【问题描述】:

这是我的代码:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self baseInit];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    if ((self = [super initWithCoder:aDecoder])) {
        [self baseInit];
    }
    return self;
}

- (void)baseInit {
    _selectedImage = [UIImage imageNamed:@"SelectedStar"];
    _deselectedImage = [UIImage imageNamed:@"DeselectedStar"];
    _rating = 6.5f;
    _editable = NO;
    _imageViews = [[NSMutableArray alloc] init];
    _maxRating = 10;
    _minImageSize = CGSizeMake(5, 5);
    _delegate = nil;

    [self setBackgroundColor:[UIColor whiteColor]];
}

- (void)drawRect:(CGRect)rect {
    NSLog(@"Star size: %@", NSStringFromCGSize(_selectedImage.size));
    NSLog(@"Star scale: %f", _selectedImage.scale);      
    ...
}

现在无论我使用什么目标操作系统或设备模拟器,NSLog 都会给我:

2015-01-31 16:54:36.709 RatingViewDeveloper[6076:1679432] Star size: {21.5, 20}
2015-01-31 16:54:36.710 RatingViewDeveloper[6076:1679432] Star scale: 2.000000

images.xcassets中的文件如下:

  • ImageSet 名为 DeselectedStar,带有图像:
    • DeselectedStar.png
    • DeselectedStar@2x.png
    • DeselectedStar@3x.png

对于名为 SelectedStar 的 ImageSet 也是如此。

它返回的尺寸始终是标准尺寸图像的尺寸,从不是 2x 甚至 3x 版本,我不明白为什么,毕竟比例是 2.0。我已尝试再次清洁和构建,但结果总是糟糕的 1x 图像。

【问题讨论】:

  • 图像的高度和宽度始终为1x,2x会自动调整,分辨率会翻倍,但高度和宽度不会改变。
  • 重命名并将其他图像设置为 DeselectedStar@2x.png,您会看到我在说什么。

标签: ios objective-c uiimage xcasset


【解决方案1】:

图像的高度和宽度始终为1x,2x会自动调整,分辨率会加倍,但高度和宽度不会改变。

重命名其他图像并将其设置为 DeselectedStar@2x.png,您将看到我在说什么。

【讨论】:

  • 你是完全正确的,现在我也是为什么它总是看起来很糟糕的原因......我将选定的图像绘制在未选择的图像之上,这给了它们一个难看的边框,我'必须解决这个问题,但你是对的。
  • 事实上,我发现使用UIGraphicsBeginImageContext(clip) 会使所有内容在视网膜设备上的分辨率都很低。使用UIGraphicsBeginImageContextWithOptions(clip, NO, 2.0f) 解决了这个问题。
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 2011-06-12
相关资源
最近更新 更多