【问题标题】:UIButton custom retina image stretched in iPad Retina Display在 iPad Retina Display 中拉伸的 UIButton 自定义视网膜图像
【发布时间】: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 但它给出了相同的结果:(
  • 清除您的项目并重新编译它。我很确定这是由视网膜尺寸图像引起的,而不是与正常图像完全相同。

标签: iphone ios ipad ios5 ios6


【解决方案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 显示屏的设备指定一个单独的版本,并且必须列出所有图像吗?不可能!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多