iOS:UIImage 缩放以填充 UIView

Posted

技术标签:

【中文标题】iOS:UIImage 缩放以填充 UIView【英文标题】:iOS: UIImage scale to fill inside a UIView 【发布时间】:2011-08-19 20:09:45 【问题描述】:

我正在继承 UIView,检索远程图像,然后使用 drawRect 将其绘制到视图中。这很好用,但是图像会根据我为视图框架设置的内容而倾斜。

我可以将 UIViewContentModeScaleAspectFill 的 contentMode 添加到我的 UIView,但它似乎根本不适用于我正在绘制的 UIImage,它仍然会挤压 UIImage,因为它遵循视图框架大小。

似乎我应该执行以下操作,但这只是将图像在我的框架内缩放 100%,而不是遵循 contentMode 设置:

[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];

我是否需要在 drawRect: 中做一些特定的事情来使我的图像遵循 contentMode 属性?

【问题讨论】:

【参考方案1】:

我认为最简单的解决方案是继承 UIImageView 而不是 UIView 并使用类的 contentMode 属性。那么就不需要调用drawRect了,把图片加载到imageView中就可以了。

或者,如果您需要继承 UIView,请将 UIImageView 添加到您的视图中,设置弹簧和支柱,设置 contentMode,然后加载您的图像。

【讨论】:

为什么还要子类UIImageView?就用它吧。 @nic:contentMode 是您应该在drawRect 中尊重的属性,而不是适用于您的属性。 UIImageView 已经服从了。 UIImageView 不调用 drawRect。而且由于我在做自定义绘图,所以我需要使用 UIView。 @Nathanial,我喜欢将 UIImageView 添加为我的主视图的子视图的想法。效果很好!【参考方案2】:

你可以使用这样的东西

    // If we have a custom background image, then draw it, othwerwise call super and draw the standard nav bar
- (void)drawRect:(CGRect)rect

  if (navigationBarBackgroundImage)
    [navigationBarBackgroundImage.image drawInRect:rect];
  else
    [super drawRect:rect];


// Save the background image and call setNeedsDisplay to force a redraw
-(void) setBackgroundWith:(UIImage*)backgroundImage

  self.navigationBarBackgroundImage = [[[UIImageView alloc] initWithFrame:self.frame] autorelease];
  navigationBarBackgroundImage.image = backgroundImage;
  [self setNeedsDisplay];

【讨论】:

以上是关于iOS:UIImage 缩放以填充 UIView的主要内容,如果未能解决你的问题,请参考以下文章

iOS Xcode 使背景图像缩放以填充

iPad (iOS6) 上的 Safari 无法缩放 HTML5 视频以填充 100% 的页面宽度

缩放 UIImage 以适应 UIButton 的问题

IOS:在滚动视图中添加图像视图以进行缩放

如何缩放 UIImage 以适应 UIScrollView 的尺寸?

iOS图片缩放