在 iPad Retina Display 中拉伸的 UIButton 自定义视网膜图像

Posted

技术标签:

【中文标题】在 iPad Retina Display 中拉伸的 UIButton 自定义视网膜图像【英文标题】:UIButton custom retina image stretched in iPad Retina Display 【发布时间】:2012-11-30 09:01:46 【问题描述】:

我对 iPad 视网膜图像有一个问题。当我在普通 ipad 中执行 add 时,它看起来很棒。

但是当我在 iPad Retina 中执行这个应用程序时,UIButton 自定义图像会向上拉伸。

我还为视网膜模式的“@2x”图标图像添加了图像。

使用此代码:

UIButton *btnEye=[[UIButton alloc] initWithFrame:CGRectMake(10, 5.5, 35, 35)];
[btnEye setImage:eyeImage forState:UIControlStateNormal];
[reportToolbar addSubview:btnEye];

在正常模式下:

在 Reitna 模式下:

【问题讨论】:

如何创建 eyeImage? 像“CGRectMake(10, 5.5, 35, 35)”这样创建按钮的原点不是一个好主意。在非视网膜设备中,由于 5.5,您的按钮和文本会变得模糊。 UIImage *eyeImage = [UIImage imageNamed:@"eye.png"]; 嘿戴夫,我也尝试使用 UIbutton cutomtype 但它给出了相同的结果:( 清除您的项目并重新编译它。我很确定这是由视网膜尺寸图像引起的,而不是与正常图像完全相同。 【参考方案1】:

视网膜图像的分辨率真的是正常的两倍还是和正常的分辨率相同?

【讨论】:

【参考方案2】:

简单地说,你应该用正常的图像替换“@2x”图像,看起来图像的大小是相反的。

【讨论】:

【参考方案3】:

此代码不会赢得选美比赛,但您可以试一试!

向你的类添加一个函数来识别你是否有视网膜设备

- (BOOL)isRetina 
   return [self respondsToSelector:@selector(displayLinkWithTarget:selector:)] && (self.scale == 2.0);

当你设置 eyeImage 时这样做

UIImageView *eyeImage = nil;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad && [self isRetina]) 
    eyeImage = [UIImageView imageNamed:@"eye@2x.png"];
 else 
    eyeImage = [UIImageView imageNamed:@"eye.png"];

这样你就可以强制你的设备使用视网膜图像,如果它有一个:-)。

【讨论】:

XCode 首选项中是否已经有一些东西可以做到这一点?你能想象必须为每个配备 Retina 显示屏的设备指定一个单独的版本,并且必须列出所有图像吗?不可能!

以上是关于在 iPad Retina Display 中拉伸的 UIButton 自定义视网膜图像的主要内容,如果未能解决你的问题,请参考以下文章

iPhone/iPad 和 iPhone(Retina)/iPad(Retina) 中图像的理想分辨率

CATiledLayer PDF 在 iPad 3 Retina 显示屏上的性能很差

测试 iPad 第 4 代/Retina 显示屏

iPad Retina - iPad 使用 iPhone 视网膜图像

iPad Mini Retina 的设备名称

如何使 iphone 和 iphone4-retina 兼容的应用程序(在可可中完成)轻松适应 ipad?