繁体   English   中英

如何在不拉伸的情况下将背景图像居中放置在UIView中

[英]How to centre the background image in a UIView without streching it

我想在UIView居中背景图像。 背景图像小于UIView本身,并且我不想拉伸它,即我希望它具有其原始大小。 我写了下面的代码

UIImage *backgroundImage=[[UIImage alloc] initWithContentsOfFile:@"analog_display_bgr.png"];

CGSize backgroundImageSize= CGSizeMake (backgroundImage.size.width,backgroundImage.size.height);
UIGraphicsBeginImageContext(backgroundImageSize);//self.frame.size
CGRect backgroundImagePosition = CGRectMake(self.bounds.origin.x+m_center.x-backgroundImage.size.width/2.0, self.bounds.origin.y+m_center.y-backgroundImage.size.height/2.0, backgroundImage.size.width, backgroundImage.size.height);
[[UIImage imageNamed:@"analog_display_bgr.png"] drawInRect:backgroundImagePosition];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

self.backgroundColor = [[UIColor alloc] initWithPatternImage:image];

我应该做这份工作,但是不起作用。

知道有什么问题吗? 提前致谢。

我仍然无法复制您正在谈论的拉伸效果,但是我相信您的大部分问题都在这一行中UIGraphicsBeginImageContext(backgroundImageSize); 您想要的是使新图像成为视图的大小,而不是现有的大小。 无论如何,这段代码对我有用。 让我知道它是否也适用于您。

UIImage *backgroundImage = [UIImage imageNamed:@"analog_display_bgr.png"];

UIGraphicsBeginImageContext(self.bounds.size);

CGRect imagePosition = CGRectMake((self.bounds.size.width / 2)  - (backgroundImage.size.width / 2),
                                  (self.bounds.size.height / 2) - (backgroundImage.size.height / 2),
                                  backgroundImage.size.width,
                                  backgroundImage.size.height);

[backgroundImage drawInRect:imagePosition];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

self.backgroundColor = [[UIColor alloc] initWithPatternImage:image];

我尝试了您的代码,却一无所获。 完全空白的视图。 我将按照您的描述进行操作的方式如下:

UIImage *backgroundImage = [UIImage imageNamed:@"analog_display_bgr.png"];
UIImageView *imageView = [[UIImageView alloc]initWithImage:backgroundImage];
CGRect imageViewFrame = imageView.frame;
imageViewFrame.origin.x = (self.bounds.size.width / 2) - (imageView.bounds.size.width / 2);
imageViewFrame.origin.y = (self.bounds.size.height / 2) - (imageView.bounds.size.height / 2);
[imageView setFrame:imageViewFrame];
[self addSubview:imageView];

我在UIView子类的- (void)awakeFromNib中进行了尝试,并且工作正常。 在视图中心绘制图像而不拉伸它。

如果我对您的理解正确,那么您希望图像成为视图的背景,那么在其他所有内容之后。 假设您将UIImageView添加到所有其他视图的后面,我上面提供的代码将做到这一点。 如果您仍然希望将图像绘制为backgroundColor,就像我知道的那样,我会看看是否可以使它工作。

很抱歉发布了另一个答案,但是我无法在评论中添加图片,因此我想确保自己完全了解您想要的内容。

因此,据我了解,这就是您的代码所要做的

在此处输入图片说明

这是我的代码的作用:

在此处输入图片说明

但是您想要的是更多这样的东西:

在此处输入图片说明在此处输入图片说明

那是对的吗? 如果是,是哪一个? 一个在左边还是右边?

您可以将UIImageView添加到您的UIView并为其设置图像。 您也可以使用UIViewContentMode属性,可能clipToBounds = YES具有clipToBounds = YES UIViewContentModeCenterUIViewContentModeScaleAspectFill :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM