代码之家  ›  专栏  ›  技术社区  ›  Adi

UIImageView图像的多重设置

  •  2
  • Adi  · 技术社区  · 17 年前

    我试图做的是维护所有UIImages的地图-每个都是唯一的,并根据游戏引擎的要求将每个重新分配给多个UIImageView。 随着游戏的进行,我从显示器上删除了一些UIImageView,以后可能会将它们与不同的预加载UIImages一起重用。

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

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

    [m_ParentView添加子视图:m_ImageView];

    接下来的几次我只是简单地切换图像:

    [m_ImageView.image发布];

    [m_ImageView setImage otherSavedImg];

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

    谢谢

    1 回复  |  直到 6 年前
        1
  •  3
  •   Dave DeLong    17 年前

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

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

    UIImageView+调整大小.h:

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

    UIImageView+调整大小.m:

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

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

    [myImageView setImage:anImage resize:YES];