web-dev-qa-db-ja.com

UIViewの背景画像を塗りつぶす方法

UIViewがあり、この方法で背景画像を設定します。

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sfond-appz.png"]];

私の問題は、バックイメージがビューの中央に配置されていないが、すべてのビューを埋めるために何度か再生されることです。 uiviewとscretch内で画像を中央揃えにして画面サイズにする方法はありますか?

注:UIImageViewがあるため、バックグラウンドでscrollviewを使用できません。

67
JackTurky

中央に引き伸ばされた画像を作成するには、事前に画像を処理する必要があります。これを試して:

UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

self.view.backgroundColor = [UIColor colorWithPatternImage:image];
279
mr.pppoe

Swift使用する...

UIGraphicsBeginImageContext(self.view.frame.size)
UIImage(named: "ImageName.png")?.draw(in: self.view.bounds)

if let image = UIGraphicsGetImageFromCurrentImageContext(){
    UIGraphicsEndImageContext()
    self.view.backgroundColor = UIColor(patternImage: image)
}else{
    UIGraphicsEndImageContext()
    debugPrint("Image not available")
 }
54
Zaid Pathan

colorWithPattern:メソッドは、実際には画像からパターンを生成するためのものです。したがって、必要なカスタマイズは不可能である可能性が高く、そうすることも意図されていません。

確かに、UIImageViewを使用して、画像を中央揃えおよびスケーリングする必要があります。 UIScrollViewを持っているという事実は、これを妨げません:

self.viewを汎用ビューにして、UIImageViewUIScrollViewの両方をサブビューとして追加します。 Interface Builderですべてが正しく接続されていることを確認し、スクロールビューの背景色を透明にします。

これは、将来の変更に対応するための最もシンプルで柔軟性の高いデザインです。

17
Mundi

繰り返し:

UIImage *img = [UIImage imageNamed:@"bg.png"];
view.backgroundColor = [UIColor colorWithPatternImage:img];

ストレッチ

UIImage *img = [UIImage imageNamed:@"bg.png"];
view.layer.contents = img.CGImage;
16

Swift 2.1の場合、これを使用します...

    UIGraphicsBeginImageContext(self.view.frame.size)
    UIImage(named: "Cyan.jpg")?.drawInRect(self.view.bounds)

    let image: UIImage! = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    self.view.backgroundColor = UIColor(patternImage: image)
3
yazh

Swift 4で行う正しい方法、画面サイズとしてのフレームが正しい場合は別の場所に置く。viewDidLayoutSubviewsに実際のフレームを取得できるので、これをviewDidLayoutSubviewsに記述することが重要

   override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        UIGraphicsBeginImageContext(view.frame.size)
        UIImage(named: "myImage")?.draw(in: self.view.bounds)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        view.backgroundColor = UIColor.init(patternImage: image!)
    }
2
Jack

IGraphicsBeginImageContextメソッドを使用して、ビューと同じ画像サイズを設定できます。

構文:void UIGraphicsBeginImageContext(CGSize size);

 #define IMAGE(imageName) (UIImage *)[UIImage imageWithContentsOfFile:
  [[NSBundle mainBundle] pathForResource:imageName ofType:IMAGE_TYPE_PNG]]

        UIGraphicsBeginImageContext(self.view.frame.size);
        [[UIImage imageNamed:@“MyImage.png"] drawInRect:self.view.bounds];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

    self.view.backgroundColor = [UIColor colorWithPatternImage:IMAGE(@"mainBg")];
1

マークされた答えは問題ありませんが、画像が引き伸ばされます。私の場合、ストレッチではなく繰り返したい小さなタイル画像がありました。また、黒の背景の問題を解決するには、次のコードが最善の方法でした。

UIImage *tileImage = [UIImage imageNamed:@"myTileImage"];
UIColor *color = [UIColor colorWithPatternImage:tileImage];
UIView  *backgroundView = [[UIView alloc] initWithFrame:self.view.frame];
[backgroundView setBackgroundColor:color];
//backgroundView.alpha = 0.1; //use this if you want to fade it away.
[self.view addSubview:backgroundView];
[self.view sendSubviewToBack:backgroundView];
1
CSawy

Swift 3.0の場合、次のコードを使用します。

    UIGraphicsBeginImageContext(self.view.frame.size)
    UIImage(named: "bg.png")?.drawAsPattern(in: self.view.bounds)
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    self.view.backgroundColor = UIColor(patternImage: image)
1
farhad rubel

Swift 4ソリューション:

@IBInspectable var backgroundImage: UIImage? {
    didSet {
        UIGraphicsBeginImageContext(self.frame.size)
        backgroundImage?.draw(in: self.bounds)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        if let image = image{
            self.backgroundColor = UIColor(patternImage: image)
        }
    }
}
0
Maor