iOS UIView背景图片

时间:2012-04-03 13:34:35

标签: ios uiview

我希望在UIImage

上有UIView.作为背景图片

这是我的代码:

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

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

是否适合缩放/适合UIView /适合尺寸模式?

13 个答案:

答案 0 :(得分:52)

在添加图片之前,您需要处理图片,请尝试以下操作:

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

self.view.backgroundColor = [UIColor colorWithPatternImage:image];

答案 1 :(得分:27)

你好试试这个,

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

答案 2 :(得分:11)

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

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

答案 3 :(得分:9)

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)

答案 4 :(得分:8)

根据UIColor API:

  

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

这意味着它会尝试从图像中创建一个图案来填充该区域。我认为最好的方法是重新调整图像尺寸以适应UIView尺寸。

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

The simplest way to resize an UIImage?

答案 5 :(得分:7)

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

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

答案 6 :(得分:2)

我在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)
    }

答案 7 :(得分:1)

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

如果视图的大小相同,您可以在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的帮助!

答案 10 :(得分:0)

您可以使用 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")];

答案 11 :(得分:0)

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

所以我创建了这个类。只要UIImageView容器通过UIView布局,它就会根据layoutSubviews容器更新。{/ p>

/**
 * 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:)") }
}

答案 12 :(得分:-1)

this.View.BackgroundColor = UIColor.FromPatternImage (UIImage.FromFile ("body_background.png"));