Xcode 9 asset catalogue Preserves Vector Data 不起作用?
Xcode 9 asset catalog Preserves Vector Data not working?
我认为 Xcode 9 资产目录中的新保留矢量数据复选标记最终会让我们调整矢量 PDF 图像的大小,但显然不是。这是我在预览中两次缩放后看到的测试图像:
放大后效果很好,很清晰,很明显这是一张矢量图。但这是我的应用程序中两个图像视图的样子:
那么我的矢量数据在哪里?这个非常需要的功能仍然在行动中缺失吗?它仍然只适用于自动生成的 2x 和 3x 图像吗?如果是这样,“保留矢量数据”复选框给我们带来了什么我们还没有的东西?
它有效,但前提是您自己执行调整大小:
这是用代码实现的,像这样:
let im = UIImage(named:"Image")!
let r = UIGraphicsImageRenderer(size:self.iv2.bounds.size)
let im2 = r.image {
_ in
im.draw(in: self.iv2.bounds)
}
self.iv2.image = im2
self.iv2.contentMode = .center
因此 UIImageView 将在缩放时进行栅格化(例如,对于 Aspect Fit),但在代码中绘制将保留矢量数据。
编辑 Xcode 9 beta 5 中的新功能,现在可以按预期工作了!在此屏幕截图中,第二个图像视图仅进行缩放以填充,仅此而已。我们大幅调整尺寸!
EDIT 在使用 Xcode 11 的过程中,我终于找到了一个始终有效的公式。这意味着在启动时,无需额外代码,在图像视图或其他地方,基于矢量的图像在任何尺寸下都显得清晰。
在资产目录中,您必须将比例弹出菜单设置为独立比例并将基于矢量的图像放入 1x 槽中。选中保留矢量数据。完成。
编辑: 在 Xcode 9 GM (9A235)
中仍然存在相同的错误行为
截至今天(Xcode 9 beta 6 9M214v),如果 UIImageView 至少有 3 个与间距相关的约束,图像将只能正确呈现(不模糊)。
例如。左侧间距、右侧间距、顶部间距以及定义 UIImageView 高度的另一个约束。
另请注意,完全禁用自动布局将使所有 UIImageView 呈现不正确。
我为这个错误填写了 rdar://34306192 (http://www.openradar.me/radar?id=4968083747766272)。
就我而言 (Xcode 9.4.1),在 Interface Builder 中创建了 imageView
- 我注意到当我最初到达屏幕时,图像模糊。如果我随后更改设备方向,图像就会变得清晰。我尝试在 viewDidLoad()
中手动调用不同的方法,这是我目前发现的:
这有效:
let image = imageView.image
imageView.image = nil
imageView.image = image
None 个有效:
imageView.layoutSubviews()
imageView.layoutMarginsDidChange()
imageView.setNeedsLayout()
imageView.setNeedsDisplay()
imageView.reloadInputViews()
imageView.updateConstraints()
imageView.contentMode = .center ; imageView.contentMode = .scaleToFill
如果你经常调用它,你当然应该扩展或subclass UIImageView
,例如
class UIImageViewWithPreserveVectorDataFix: UIImageView {
override func awakeFromNib() {
super.awakeFromNib()
let image = self.image
self.image = nil
self.image = image
}
}
(然后当然在 Interface Builder 中将 UIImageViewWithPreserveVectorDataFix
设置为 class)
我在使用新 Preserves Vector Data
时多次遇到同样的问题。
非常简单的解决方案,效果很好对我来说:
- 从不 在 Interface Builder 中设置
UIImageView
image
属性,将其留空。
- 以编程方式设置
image
值。
希望对您有所帮助。
我认为 Xcode 9 资产目录中的新保留矢量数据复选标记最终会让我们调整矢量 PDF 图像的大小,但显然不是。这是我在预览中两次缩放后看到的测试图像:
放大后效果很好,很清晰,很明显这是一张矢量图。但这是我的应用程序中两个图像视图的样子:
那么我的矢量数据在哪里?这个非常需要的功能仍然在行动中缺失吗?它仍然只适用于自动生成的 2x 和 3x 图像吗?如果是这样,“保留矢量数据”复选框给我们带来了什么我们还没有的东西?
它有效,但前提是您自己执行调整大小:
这是用代码实现的,像这样:
let im = UIImage(named:"Image")!
let r = UIGraphicsImageRenderer(size:self.iv2.bounds.size)
let im2 = r.image {
_ in
im.draw(in: self.iv2.bounds)
}
self.iv2.image = im2
self.iv2.contentMode = .center
因此 UIImageView 将在缩放时进行栅格化(例如,对于 Aspect Fit),但在代码中绘制将保留矢量数据。
编辑 Xcode 9 beta 5 中的新功能,现在可以按预期工作了!在此屏幕截图中,第二个图像视图仅进行缩放以填充,仅此而已。我们大幅调整尺寸!
EDIT 在使用 Xcode 11 的过程中,我终于找到了一个始终有效的公式。这意味着在启动时,无需额外代码,在图像视图或其他地方,基于矢量的图像在任何尺寸下都显得清晰。
在资产目录中,您必须将比例弹出菜单设置为独立比例并将基于矢量的图像放入 1x 槽中。选中保留矢量数据。完成。
编辑: 在 Xcode 9 GM (9A235)
中仍然存在相同的错误行为截至今天(Xcode 9 beta 6 9M214v),如果 UIImageView 至少有 3 个与间距相关的约束,图像将只能正确呈现(不模糊)。
例如。左侧间距、右侧间距、顶部间距以及定义 UIImageView 高度的另一个约束。
另请注意,完全禁用自动布局将使所有 UIImageView 呈现不正确。
我为这个错误填写了 rdar://34306192 (http://www.openradar.me/radar?id=4968083747766272)。
就我而言 (Xcode 9.4.1),在 Interface Builder 中创建了 imageView
- 我注意到当我最初到达屏幕时,图像模糊。如果我随后更改设备方向,图像就会变得清晰。我尝试在 viewDidLoad()
中手动调用不同的方法,这是我目前发现的:
这有效:
let image = imageView.image
imageView.image = nil
imageView.image = image
None 个有效:
imageView.layoutSubviews()
imageView.layoutMarginsDidChange()
imageView.setNeedsLayout()
imageView.setNeedsDisplay()
imageView.reloadInputViews()
imageView.updateConstraints()
imageView.contentMode = .center ; imageView.contentMode = .scaleToFill
如果你经常调用它,你当然应该扩展或subclass UIImageView
,例如
class UIImageViewWithPreserveVectorDataFix: UIImageView {
override func awakeFromNib() {
super.awakeFromNib()
let image = self.image
self.image = nil
self.image = image
}
}
(然后当然在 Interface Builder 中将 UIImageViewWithPreserveVectorDataFix
设置为 class)
我在使用新 Preserves Vector Data
时多次遇到同样的问题。
非常简单的解决方案,效果很好对我来说:
- 从不 在 Interface Builder 中设置
UIImageView
image
属性,将其留空。 - 以编程方式设置
image
值。
希望对您有所帮助。