【问题标题】:setting size of UIImageView in a UITableView cell programmatically - what is the origin?以编程方式在 UITableView 单元格中设置 UIImageView 的大小 - 起源是什么?
【发布时间】:2010-09-11 20:55:54
【问题描述】:

我正在尝试以编程方式设置 UIImageView 的大小:

[thisImageView setFrame:CGRectMake(x, y, image.size.width, image.size.height)];

我尝试使用 x = 0, y = 0,但 UIImageView 消失了。

关于我为什么要这样做的更多信息。我试图在不使用 iOS 4 SDK 的情况下在 iPhone 4 上显示高分辨率图像(仅使用 3.2 SDK API 调用)。我打电话来看看我是否在 iPhone 4 上,所以我试图将 UIImageView 的大小加倍,这样当我放入高分辨率 UIImage 时,它​​就不会有颗粒感。

【问题讨论】:

  • P.S.将我的 UIImageView 的大小翻倍甚至可以实现我想要做的事情吗?

标签: iphone uiimageview


【解决方案1】:

不确定 iOS 有什么特别之处。只需使用与 3.2 相同的方法: imageNamed: ... 只要您的图像命名正确(yourimagename.png 和 yourimagename@2x.png),它就会处理所有事情。这里的 iOS 4 SDK 没有什么花哨的,只是像以前一样以磅为单位给出你使用的大小。

如果这不适合你的情况,你能解释一下原因吗?

【讨论】:

  • 是的,Eiko。这里的问题是我正在从 Web 服务器检索图像,因此我可以动态更改图像。我发送的图像是我想在 iPhone 4 上显示的分辨率(例如,我在 IB 中的 UIImageView 是 100 x 100 像素,我正在发送一个 200 x 200 像素的图像)。我尝试发送带有@2x 后缀的图像,但没有帮助。解决方案是发送两个版本的图像,将它们存储在本地,然后加载吗?
  • 嗯...“也许”。下载图像,保存它并使用 imageNamed: 应该可以工作(不要在该方法中使用 @2x 扩展名,只是简单的名称)。您还应该能够手动设置图像的比例因子
  • 但是没有任何设备
  • 我认为您将 SDK 版本与操作系统版本混淆了。 iOS 4.0(操作系统)可以运行仅使用 3.2 SDK 编写的应用程序。然而,即使我在 iOS 4.0+ 设备上运行我的应用程序,我也无法访问 3.2 SDK 中对视网膜显示有用的所有出色功能。
  • 您应该使用最新的(阅读:4.1)SDK 编译每个新应用程序。如果您以 3.x 设备为目标,这也适用。 (并且 IIRC Apple 现在只接受使用 4.x SDK 的构建作为应用程序上传)
【解决方案2】:

我试图在不使用 iOS 4 SDK 的情况下在 iPhone 4 上显示高分辨率图像(仅使用 3.2 SDK API 调用)

哎哟。不要那样做。

针对 4.0 编译,将部署目标设置为 3.whatever。

创建镜像时,勾选[UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)]。如果是这样,那么您可以使用+[UIImage imageWithCGImage:scale:orientation:] 创建“比例 2”图像,该图像将正确显示在 iPhone 4(具有“比例 2”屏幕)的 UIImageView 中。

如果您真的不能使用 OS 4 SDK(您似乎没有说明原因),则使用适当的内容模式 (AspectFit/AspectFill/ScaleToFill) 使 UIImageView 更小,并将其框架设置为像素大小的一半(例如,如果图像是 100x100 像素,则将其设置为 (CGSize){50,50})。这会将图像缩小到一半大小,但双分辨率屏幕意味着您可以逐个像素地看到它。

【讨论】:

  • 如果我使用 4.0 SDK,它会启用后台,这会破坏我的应用程序中的某些功能。所以我现在必须构建和使用 3.2 SDK。你能给我一个不使用 OS 4 SDK 的方法的例子吗?谢谢!
  • 如果应用程序后台是 4.0 中唯一不想要的,只需在 Info.plist 中设置 <key>UIApplicationExitsOnSuspend</key><true/>
  • 感谢 tc - 看起来很有趣。您可以编辑您的帖子并向我展示您的 no-4.0 SDK 解决方案的示例吗?如果我在 iPhone 4 上运行,我会按照您指定的方式执行所有操作吗?我要更改哪个 UIImageView?当我检查我是否在 iPhone 4 上运行时,IB 或编程中的那个?
【解决方案3】:

我认为你的方法是错误的。 iPhone 4 使用的是点而不是像素,这使得将尺寸翻倍很麻烦。旧设备上的 1 点等于 iPhone 4 上的 4 像素,但仍用作 1 点。

当您创建框架时,您实际上并没有为 API 提供像素尺寸,而是点尺寸。

【讨论】:

  • 那么不使用4.0 SDK就没有办法做到这一点吗?
  • 除了 iPhone,“点”比 1/72 英寸的标准 (PostScript) 点小很多。虽然 Apple 可能称其为“点”,但这是一个可怕的名称。
猜你喜欢
  • 2012-06-26
  • 2017-01-10
  • 2011-03-23
  • 2012-01-05
  • 2018-08-07
  • 2011-08-30
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
相关资源
最近更新 更多