iOS UIView 背景图片



我想在UIView.上有一个UIImage作为背景图像

这是我的代码:

UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"login.png"]];
self.view.backgroundColor = background;
[background release];

问题是,规模不行。它缩放了 640 到 480,所以我不能 100% 确定,但看起来只显示 300 到 250 或类似的东西。

是否有适合缩放/适合

UIView/适合尺寸的模式?

您需要

在添加图像之前对其进行处理,请尝试以下操作:

UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.view.backgroundColor = [UIColor colorWithPatternImage:image];

你好试试这个,

     self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"login.png"]];

指定实际背景并将其发送到视图的背面

//add background
UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg.png"]];
[myView addSubview:background];
[myView sendSubviewToBack:background];
myView.contentMode = UIViewContentModeScaleAspectFit;

Swift 中使用这个...

    UIGraphicsBeginImageContext(self.view.frame.size)
    UIImage(named: "1.png")?.drawInRect(self.view.bounds)
    var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    self.view.backgroundColor = UIColor(patternImage: image)

根据 UIColor API:

可以使用图案颜色来设置填充或描边颜色,就像设置纯色一样。在绘制过程中,根据需要平铺图案颜色中的图像以覆盖给定区域。

这意味着它会尝试从您的图像中创建图案以填充该区域。我认为最好的方法是重新缩放图像以完全适合UIView尺寸。

这里有一个很好的答案,如何在运行时调整图像大小:

调整 UIImage 大小的最简单方法?

如果你想在 swift 中做到这一点:

self.view.backgroundColor = UIColor(patternImage: UIImage(named:"background.jpg"))

我在 Swift 中使用以下扩展:

extension UIView{
    func setBackgroundImage(img: UIImage){
        UIGraphicsBeginImageContext(self.frame.size)
        img.drawInRect(self.bounds)
        let patternImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        self.backgroundColor = UIColor(patternImage: patternImage)
    }
}

在代码中,您可以像这样使用:

if let image = UIImage(named: "HomeBg"){
        self.view.setBackgroundImage(image)
    }

在界面生成器中,添加一个要ViewImage View,然后选择要在 Attributes inspector 中使用的图像。最后,通过在 Document Outline 中拖动元素,使Image View成为View的第一个子级。

如果视图的大小相同,则可以在AppDelegate.m中放置一个方法,该方法在首次运行时缩放背景图像,然后将缩放后的图像保留在内存中以备将来使用:

UIImage *backgroundImage = nil;
- (void)setBackground:(UIView *)view
{
    if (backgroundImage == nil)
    {
        UIGraphicsBeginImageContext(view.frame.size);
        [[UIImage imageNamed:@"Background"] drawInRect:view.bounds];
        backgroundImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }
    view.backgroundColor = [UIColor colorWithPatternImage:backgroundImage];
}

感谢@uneakharsh的帮助!

我也

想这样做,我发现,由于自动布局UIImageView拉伸包含UIView,当我想要另一种方式时:我希望UIImageView采用UIView的大小。

所以我创建了这个类。每当通过layoutSubviews布置时,它都会根据UIView容器更新UIImageView框架。

/**
 * View with an image whose frame is adjusted to the frame of the view. 
 */
class ViewWithImage: UIView {
    let image: UIImageView
    init(image: UIImageView) {
        self.image = image
        super.init(frame: .zero)
        self.addSubview(image)
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        updateImageFrame()
    }
    private func updateImageFrame() {
        image.frame = CGRect(origin: .zero, size: self.frame.size)
    }
    required init?(coder: NSCoder) { fatalError("no init(coder:)") }
}
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]];
self.view.backgroundColor = background;
[background release];

可以使用 UIGraphicsBeginImageContext 方法将图像的大小设置为与视图相同的大小。

语法:void UIGraphicsBeginImageContext(CGSize size(;

  #define IMAGE(imageName) (UIImage *)[UIImage imageWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:imageName ofType:IMAGE_TYPE_PNG]]
        UIGraphicsBeginImageContext(self.view.frame.size);
        [[UIImage imageNamed:@“MyImage.png"] drawInRect:self.view.bounds];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    self.view.backgroundColor = [UIColor colorWithPatternImage:IMAGE(@"mainBg")];
this.View.BackgroundColor = UIColor.FromPatternImage (UIImage.FromFile ("body_background.png"));

最新更新