【问题标题】:multiple setting of the image for UIImageViewUIImageView图片的多重设置
【发布时间】:2010-11-08 04:19:02
【问题描述】:

最近我一直在尝试通过使用已分配的 UIImageViews 和 UIImages 最小化分配和复制资源作为图像所花费的时间来节省渲染时间。

我尝试做的是维护所有 UIImages 的映射 - 每一个都是唯一的,并根据游戏引擎的要求将每个 UIImageView 重新分配给多个 UIImageView。 随着游戏的进行,我会从显示中删除一些 UIImageView,稍后可能会使用不同的预加载 UIImage 重用它们。

第一次创建 UIImageView 时,我会执行以下操作:

m_ImageView = [[UIImageView alloc] initWithImage : initialImg];

[m_ParentView addSubview:m_ImageView];

而以下时间我只是简单地切换图像:

[m_ImageView.image 发布];

[m_ImageView setImage otherSavedImg];

问题是切换后显示的新图像大小与初始图像大小相同。 我通过每次重新创建 UIImageView 绕过了这个问题(这似乎是浪费时间),但我想知道为什么会发生这种情况以及如何防止它。

谢谢,

【问题讨论】:

    标签: iphone uiimageview uiimage


    【解决方案1】:

    UIImageView 的文档说“此方法调整接收器的框架以匹配指定图像的大小。”调用“setImage:”时,您使用的是简单的属性设置器。没有进行额外的重新计算。如果您需要重新调整 UIImageView 框架的大小,则必须手动进行。

    从您提供的上下文来看,这似乎是您会经常做的事情。因此,我建议为 UIImageView 创建一个类别:

    UIImageView+Resizing.h:

    @interface UIImageView (Resizing)
    
    - (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize;
    
    @end
    

    UIImageView+Resizing.m:

    @implementation UIImageView (Resizing)
    
    - (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize {
      [self setImage:newImage];
      if (shouldResize == YES) {
        [self sizeToFit];
      }
    }
    
    @end
    

    现在,每当您需要更改图像并调整 imageView 的大小时,只需 #import UIImageView+Resizing.h 并使用:

    [myImageView setImage:anImage resize:YES];
    

    【讨论】:

    • 嘿戴夫,谢谢你的回答,读完后我回去从头到尾阅读了 UIImageView 文档,他们确实提到了这样的事情: > 设置图像属性不会改变图像的大小图像视图。调用 sizeToFit 来调整视图的大小以匹配图像。很奇怪,他们没有使用 UIImage 集,但是嘿 - 你救了我一天。 -阿迪
    • 哈,我忘了 sizeToFit 方法!很好的发现。但是,我仍然建议创建一个类别来设置图像和 sizeToFit,这样它就可以简化 您的 代码。
    • 我回过头来将答案更改为使用“sizeToFit”。 =)
    猜你喜欢
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多