43

ビューが1つあり、UIImageでこのビューのbackGroudColorを設定したいと思います。次のようなコード:

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

問題は次のとおりです。backImage'フレームがビューよりも小さい。UIImageを拡大してビュー全体に表示する方法。私はUIImageViewが到達できる使用を知っています。

誰かが良い考えを持っていますか?

アップデート:

画像を1枚アップロードできません。

このように:backImgeのサイズは30 * 30で、ビューのサイズは1024*700です。myview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backImage.png"]];

その結果、myviewのbackGroupには多くの「backImage.png」が含まれます。私の目標は、1つの「backImage.png」を完全なmyviewにすることです。

4

6 に答える 6

123

試してみてください。

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

迅速:

self.view.layer.contents = UIImage(named: "freshBackground")!.cgImage
于 2012-12-27T04:08:35.117 に答える
25

私の知る限り、背景のパターン画像を直接サイズ変更することはできません。最も簡単な方法は、親ビューのフレーム サイズに合わせて画像を変更することです。または、親ビューのサイズに合わせて画像を再描画できます。

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]];
于 2012-05-17T04:07:48.713 に答える
3

Swift に翻訳された world000 の回答:

self.layer.contents = UIImage(named: "freshBackground.png")?.CGImage
于 2015-08-31T20:05:44.103 に答える
2

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

オーバーロードされたバリアントと同じ:

+(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;
}
于 2013-02-21T06:58:06.200 に答える
0

これは、以前のコメントに基づいて、最初に画像を拡大縮小し、次に比例してアスペクト フィルにトリミングするバージョンです。

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;
}
于 2015-10-17T12:22:56.527 に答える