2012-05-17 7 views
37

私は1つのビューを持っており、UIImageによってこのビューのbackGroudColorを設定する必要があります。 コードとして:ios:colorWithPatternImage、画像全体を伸ばす

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

問題がある:backImage'frameビューよりも小さいです。 UIImageを完全に私の視点に引き伸ばす方法。 私はUIImageViewを使用してアクセスできます。

誰かが良いアイデアを持っていますか?

更新:

私は1枚の画像をアップロードすることはできません。このよう

:backImgeのサイズは30×30で、私のビューのサイズは* 700 1024、 私はmyview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"backImage.png"]];

を使用する場合、結果はMYVIEWのbackGroupは、多くの 'backImage.png' を持っているです。 私の目標は「backImage.png」ストリートフルマイビューです。

+0

あなたは私たちの問題に関するいくつかのより多くのアイデアを得るために、いくつかの画像を表示することができますか? – rishi

+0

これは問題である可能性があります - http://stackoverflow.com/questions/8651276/background-color-colorwithpatternimage-not-filling-entire-view-for-ipad – rishi

答えて

23

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

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

お試しください。

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

+2

完全に動作します。 – delannoyk

+1

はい、問題なく動作しますアイデアはどうですか? –

+0

チュートリアルで説明しています:http://www.raywenderlich。com/2502/calayers-tutorial-for-ios-introduction-to-calayers-tutorial – SirNod

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

これは非常によくmwを助ける – CRDave

3

world000の答え:

0123オーバーロードバリアントと
self.layer.contents = UIImage(named: "freshBackground.png")?.CGImage 
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; 
} 
0

私に次のメソッドを使用します。

  1. パターンとして得られる画像を使用
  2. (それがスケーリングさせるもの)、特定範囲内の画像を描画します。

コード:

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