我有一个 UIView
,我是这样设置背景图片的:
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sfond-appz.png"]];
我的问题是背景图像在视图中心没有居中,而是重复几次以填满整个视图。有没有一种方法可以将图像居中显示在UIView中,并将其拉伸到屏幕大小?注意:我不能使用UIImageView作为背景,因为我有一个UIScrollView。
我有一个 UIView
,我是这样设置背景图片的:
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sfond-appz.png"]];
我的问题是背景图像在视图中心没有居中,而是重复几次以填满整个视图。有没有一种方法可以将图像居中显示在UIView中,并将其拉伸到屏幕大小?你需要预处理图像,使其成为一个居中且拉伸的图像。 尝试使用以下代码:
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")
}
drawAsPatternInRect
替代drawInRect
。 - Chandan Reddy重复:
UIImage *img = [UIImage imageNamed:@"bg.png"];
view.backgroundColor = [UIColor colorWithPatternImage:img];
延伸的
UIImage *img = [UIImage imageNamed:@"bg.png"];
view.layer.contents = img.CGImage;
colorWithPattern:
方法主要用于从图片中生成图案。因此,您需要的定制很可能是不可能实现的,也不是它的本意。
实际上,您需要使用一个 UIImageView
来居中和缩放一张图片。您拥有一个 UIScrollView
并不会阻止这个操作:
将 self.view
设置为一个通用视图,然后将 UIImageView
和 UIScrollView
作为子视图添加进去。确保在 Interface Builder 中正确地连接所有内容,并将滚动视图的背景色设置为透明。
我认为这是最简单和最灵活的设计,方便进行未来的更改。
在 Swift 4 中正确的做法是,如果你的框架和屏幕大小相同,可以把它放到任何地方,否则,在 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 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)
#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")];
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 4 解决方案:
@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)
}
}
}