[英]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
UIViewContentModeCenter
或UIViewContentModeScaleAspectFill
:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.