如何仅处理 UIButton 的图像内容,而不是按钮本身

Posted

技术标签:

【中文标题】如何仅处理 UIButton 的图像内容,而不是按钮本身【英文标题】:How to dispose of a UIButton's Image Contents only, not the button itself 【发布时间】:2015-04-20 20:28:04 【问题描述】:

假设我有一个 UIButton,我给了它一个背景图片,如下所示:

UIButton button = new (....);
button.SetBackroundImage = UIImage.FromFile(....);

如何在不保留图像变量的情况下处理按钮图像?我尝试了下面的代码,但它似乎不起作用。

button.CurrentBackgroundImage.Dispose() 

我的情况是,我有一个包含 10 个可见项目的 collectionview,但其中可能包含数百个项目。显然它只是重用了 10 个带有 10 个 uibuttons 的单元格。被绘制并设置为 UIButtons 的背景图像的图像是动态绘制的,一旦您滚动并重新加载可重用的集合视图单元格,就需要将其处理掉

【问题讨论】:

【参考方案1】:

只需将图像设置为零。 ios 将在必要时处理图像。

[button setImage:nil forState:UIControlStateNormal];

对于 Xamarin 特定的 Dispose 使用情况,请检查 here。

【讨论】:

我更新了上面的帖子,添加了更多信息。我正在使用需要处理的动态创建的图像,而不是无效的。设置这样的新图像会丢弃旧图像吗? 您不需要处理图像,因为将图像设置为 nil 时会发生这种情况。 如果这是特定于 Xamarin 的内容,您可以尝试先获取对图像的引用,将 UIButton.image 设置为 nil,然后对引用的图像运行 dispose。通常在 iOS 中,缓存控制器会处理所有这些“巫毒”。【参考方案2】:

在 C# 中使用IDisposable 模式:

using (var image = UIImage.FromFile ("yourImageFile.png"))
    button.SetBackroundImage = image;

【讨论】:

以上是关于如何仅处理 UIButton 的图像内容,而不是按钮本身的主要内容,如果未能解决你的问题,请参考以下文章

如何取消基于UIView块的动画?

UIButton 图像仅更改一个按钮

UIButton ImageView 仅显示颜色填充

如何在图像视图中仅缩放可见图像而不是图像的透明部分?

结合图像制作 UIButton?

如何修复 UIButton 的图像大小?