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

时间:2014-05-19 13:59:19

标签: ios uiview uiimage background-image

我想将背景图片置于我的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];

我应该做这项工作但不起作用。

知道出了什么问题吗?提前谢谢。

4 个答案:

答案 0 :(得分:3)

我仍然无法复制您正在谈论的拉伸效果,但我相信您的大部分问题都在于此行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];

答案 1 :(得分:1)

我尝试了你的代码,但我根本没有得到任何东西。完全空白视图。我所做的就是你所描述的方式是这样的:

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,就像我知道的那样,我会看看是否可以使它工作。

答案 2 :(得分:1)

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

因此,根据我的理解,这就是您的代码所做的事情

enter image description here

这就是我的代码所做的:

enter image description here

但你想要的更像是这样:

enter image description here enter image description here

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

答案 3 :(得分:0)

您可以将UIImageView添加到UIView并将图片设置为UIViewContentMode。您还可以使用UIViewContentModeCenter属性,UIViewContentModeScaleAspectFillclipToBounds = YES {{1}}来玩{/ 1}}。