如何填充UIView的背景图片

我有一个UIView ,我用这种方式设置一个背景图像:

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

我的问题是后面的图像没有在视图中居中,但重播了一些时间来填充所有的视图。 有没有办法在uiview和scretch中居中显示屏幕大小的图像?

注:我不能使用UIImageView的背景,因为我有一个scrollview

您需要预先处理图像,以制作一个居中和延伸的图像。 尝试这个:

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

对于Swift使用这个…

 UIGraphicsBeginImageContext(self.view.frame.size) UIImage(named: "ImageName.png")?.draw(in: self.view.bounds) if let image = UIGraphicsGetImageFromCurrentImageContext(){ UIGraphicsEndImageContext() self.view.backgroundColor = UIColor(patternImage: image) }else{ UIGraphicsEndImageContext() debugPrint("Image not available") } 

colorWithPattern:方法真的是用于从图像生成模式。 因此,您所需要的定制很可能是不可能的,也不是这样的。

事实上,你需要使用UIImageView中心和缩放图像。 你有一个UIScrollView事实并不妨碍这个:

使self.view通用视图,然后添加UIImageViewUIScrollView作为子视图。 确保Interface Builder中的所有接口都正确连接,并使滚动视图的背景颜色透明。

这是恕我直言对未来的变化最简单和最灵活的devise。

重复:

 UIImage *img = [UIImage imageNamed:@"bg.png"]; view.backgroundColor = [UIColor colorWithPatternImage:img]; 

拉伸

 UIImage *img = [UIImage imageNamed:@"bg.png"]; view.layer.contents = img.CGImage; 

对于Swift 2.1使用这个…

  UIGraphicsBeginImageContext(self.view.frame.size) UIImage(named: "Cyan.jpg")?.drawInRect(self.view.bounds) let image: UIImage! = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() self.view.backgroundColor = UIColor(patternImage: image) 

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

对于Swift 3.0,使用下面的代码:

  UIGraphicsBeginImageContext(self.view.frame.size) UIImage(named: "bg.png")?.drawAsPattern(in: self.view.bounds) let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() self.view.backgroundColor = UIColor(patternImage: image) 

标记的答案是好的,但它使图像拉伸。 在我的情况下,我有一个小瓷砖图像,我想重复不拉伸。 下面的代码是我解决黑色背景问题的最好方法:

 UIImage *tileImage = [UIImage imageNamed:@"myTileImage"]; UIColor *color = [UIColor colorWithPatternImage:tileImage]; UIView *backgroundView = [[UIView alloc] initWithFrame:self.view.frame]; [backgroundView setBackgroundColor:color]; //backgroundView.alpha = 0.1; //use this if you want to fade it away. [self.view addSubview:backgroundView]; [self.view sendSubviewToBack:backgroundView]; 

正确的方法来做在Swift 3.x必须&重要的写在viewDidLayoutSubviews这个,因为我们可以得到实际的框架在viewDidLayoutSubviews

  override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() UIGraphicsBeginImageContext(view.frame.size) UIImage(named: "myImage")?.draw(in: self.view.bounds) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() view.backgroundColor = UIColor.init(patternImage: image!) } 

Swift 4解决scheme:

 @IBInspectable var backgroundImage: UIImage? { didSet { UIGraphicsBeginImageContext(self.frame.size) backgroundImage?.draw(in: self.bounds) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() if let image = image{ self.backgroundColor = UIColor(patternImage: image) } } }