我想在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)
}
在界面生成器中,添加一个要View
的Image 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"));