在 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 显示屏上的性能很差