[英]ios: colorWithPatternImage , stretch image full screen
I have one view , and want set backGroudColor for this view by UIImage. 我有一个视图,并希望通过UIImage为此视图设置backGroudColor。 The code as :
代码如下:
self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backImage.png"]];
the problem is: the backImage'frame is small than the view. 问题是:backImage'frame比视图小。 how to stretch UIImage to full my view.
如何将UIImage拉伸到我的视野。 I konw use UIImageView can reach.
我知道使用UIImageView可以达到。
someone have good idea? 有人有好主意吗?
update: 更新:
I can't upload one image. 我无法上传一张图片。
Like this:backImge's size is 30*30, and my view's size is 1024*700, when i use myview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backImage.png"]];
像这样:backImge的大小是30 * 30,我的视图大小是1024 * 700,当我使用
myview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backImage.png"]];
The result is myview's backGroup has many 'backImage.png'. 结果是myview的backGroup有很多'backImage.png'。 my goal is have one 'backImage.png' streth full myview.
我的目标是让一个'backImage.png'充满我的观点。
Have a try. 试试。
self.layer.contents = (id)[UIImage imageNamed:@"freshBackground.png"].CGImage;
self.view.layer.contents = UIImage(named: "freshBackground")!.cgImage
As far as I know, you cannot resize the background's pattern image directly. 据我所知,你无法直接调整背景的图案图像。 The easiest way is just to change your image to fit your parent view's frame size.
最简单的方法是更改图像以适合父视图的帧大小。 Or you can redraw your image to fit the size of your parent view.
或者,您可以重绘图像以适合父视图的大小。
UIView * yourView = [[UIView alloc] initWithFrame:CGRectMake(10.f, 100.f, 300.f, 100.f)];
UIImage * targetImage = [UIImage imageNamed:@"backImage.png"];
// redraw the image to fit |yourView|'s size
UIGraphicsBeginImageContextWithOptions(yourView.frame.size, NO, 0.f);
[targetImage drawInRect:CGRectMake(0.f, 0.f, yourView.frame.size.width, yourView.frame.size.height)];
UIImage * resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[yourView setBackgroundColor:[UIColor colorWithPatternImage:resultImage]];
world000的答案翻译成Swift:
self.layer.contents = UIImage(named: "freshBackground.png")?.CGImage
And based on Kjuly's answer, if you want the image to be inset properly at the center rather than being stretched, use this method to get the new image: 根据Kjuly的回答,如果您希望图像在中心正确插入而不是被拉伸,请使用此方法获取新图像:
#pragma mark - Image
+(UIImage*)imageFitInCenterForSize:(CGSize)inSize forSourceImage:(UIImage*)inImage
{
// redraw the image to fit |yourView|'s size
CGSize imageOriginalSize = inImage.size;
UIImage *resultImage = nil;
if (imageOriginalSize.width<=inSize.width && imageOriginalSize.height<=inSize.height)
{
UIGraphicsBeginImageContextWithOptions(inSize, NO, 0.f);
[inImage drawInRect:CGRectMake((inSize.width-imageOriginalSize.width)/2.0, (inSize.height-imageOriginalSize.height)/2.0, imageOriginalSize.width, imageOriginalSize.height)];
resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
return resultImage;
}
The same with overloaded variant: 与重载变体相同:
+(UIImage*)imageFitInCenterForSize:(CGSize)inSize forSourceImage:(UIImage*)inImage xOffset:(CGFloat)inXOffset yOffset:(CGFloat)inYOffset
{
// http://stackoverflow.com/questions/10629403/ios-colorwithpatternimage-stretch-image-full-screen
// redraw the image to fit |yourView|'s size
CGSize imageOriginalSize = inImage.size;
UIImage *resultImage = nil;
if (imageOriginalSize.width<=inSize.width && imageOriginalSize.height<=inSize.height)
{
UIGraphicsBeginImageContextWithOptions(inSize, NO, 0.f);
[inImage drawInRect:CGRectMake((inSize.width-imageOriginalSize.width)/2.0+inXOffset, (inSize.height-imageOriginalSize.height)/2.0+inYOffset, imageOriginalSize.width, imageOriginalSize.height)];
resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
return resultImage;
}
I use the following method to: 我使用以下方法:
Code: 码:
UIGraphicsBeginImageContext(self.window.frame.size);
[[UIImage imageNamed:@"background"] drawInRect:self.window.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.window.backgroundColor = [UIColor colorWithPatternImage:image];
Here's based on previous comments a version that scales the image first, then crops to proportionally aspect fill. 这是基于之前的评论,一个版本首先缩放图像,然后裁剪成比例填充。
func imageScaledToFillSize(size: CGSize, image: UIImage) -> UIImage
{
let aspect = image.size.width / image.size.height;
UIGraphicsBeginImageContextWithOptions(size, false, 0)
if (size.width / aspect <= size.height) {
let resizedImg = self.imageScaledToSize(CGSize(width: size.height * aspect, height: size.height), image: image)
resizedImg.drawInRect(CGRectMake((size.width - resizedImg.size.width)/2, 0, resizedImg.size.width, resizedImg.size.height))
} else {
let resizedImg = self.imageScaledToSize(CGSize(width: size.width, height: size.width / aspect), image: image)
resizedImg.drawInRect(CGRectMake(0, (size.height-resizedImg.size.height)/2, resizedImg.size.width, resizedImg.size.height))
}
let imageR = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return imageR;
}
func imageScaledToSize(size: CGSize, image: UIImage) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0.0);
image.drawInRect(CGRectMake(0.0, 0.0, size.width, size.height))
let imageR = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
return imageR;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.