如何填充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
通用视图,然后添加UIImageView
和UIScrollView
作为子视图。 确保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) } } }