ios: colorWithPatternImage, растянуть изображение на весь экран

У меня есть одно представление, и я хочу установить backGroudColor для этого представления UIImage. Код как:

self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backImage.png"]];

проблема заключается в том, что кадр backImage 'меньше, чем вид. как растянуть UIImage до полного моего взгляда. Я знаю, что использование UIImageView может достичь.

у кого есть хорошая идея?

update:

Я не могу загрузить одно изображение.

Например, размер backImge равен 30 * 30, а размер моего вида равен 1024 * 700, когда я используюmyview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backImage.png"]];

Результатом является то, что backview группы myview имеет много backImage.png. моя цель - иметь один "backImage.png" Streth полный мой взгляд.

 rishi17 мая 2012 г., 05:53
Можете ли вы показать какое-нибудь изображение, чтобы дать нам больше представления о проблеме?
 rishi17 мая 2012 г., 05:53
Может быть, это твоя проблема - / Stackoverflow.com вопросы / 8651276 / ...
 dengApro02 нояб. 2018 г., 08:11
Objective-C, Xcode 10.14,self.layer.contents = (__bridge id _Nullable)([UIImage imageNamed: @"freshBackground"].CGImage);

Ответы на вопрос(6)

self.layer.contents = (id)[UIImage imageNamed:@"freshBackground.png"].CGImage;

Swift:
self.view.layer.contents = UIImage(named: "freshBackground")!.cgImage
 Evol Gate30 мая 2013 г., 09:24
Да, работает нормально, но есть идеи?
 delannoyk24 апр. 2013 г., 08:48
Отлично работает
 SirNod17 окт. 2013 г., 01:59
Вот учебник, объясняющий это: Raywenderlich.com / 2502 / ...
 Şafak Gezer17 февр. 2015 г., 14:29
2015, и все же лучшее решение.
 arshu01 июн. 2016 г., 11:38
Классно, чувак. Для Свифта:self.view.layer.contents = UIImage.init(named:"freshBackground")!.CGImage

self.layer.contents = UIImage(named: "freshBackground.png")?.CGImage

вы не можете изменить размер фонового рисунка напрямую. Самый простой способ - просто изменить изображение, чтобы оно соответствовало размеру кадра вашего родительского представления. Или вы можете перерисовать изображение, чтобы оно соответствовало размеру родительского представления.

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]];

нарисовать изображение в определенных пределах (что делает его масштабированным) использовать полученное изображение как шаблон.

Код

UIGraphicsBeginImageContext(self.window.frame.size);
[[UIImage imageNamed:@"background"] drawInRect:self.window.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.window.backgroundColor = [UIColor colorWithPatternImage:image];

основываясь на ответе Кьюли, если вы хотите, чтобы изображение было правильно вставлено в центре, а не растянуто, используйте этот метод для получения нового изображения:

#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;
}

То же самое с перегруженным вариантом:

+(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;
}
 CRDave01 окт. 2013 г., 11:55
Это поможет мне очень хорошо

которая сначала масштабирует изображение, а затем обрезает изображение до пропорционального заполнения.

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;
}

Ваш ответ на вопрос