UIView
があり、この方法で背景画像を設定します。
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sfond-appz.png"]];
私の問題は、バックイメージがビューの中央に配置されていないが、すべてのビューを埋めるために何度か再生されることです。 uiviewとscretch内で画像を中央揃えにして画面サイズにする方法はありますか?
注:UIImageView
があるため、バックグラウンドでscrollview
を使用できません。
中央に引き伸ばされた画像を作成するには、事前に画像を処理する必要があります。これを試して:
UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.view.backgroundColor = [UIColor colorWithPatternImage:image];
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")
}
colorWithPattern:
メソッドは、実際には画像からパターンを生成するためのものです。したがって、必要なカスタマイズは不可能である可能性が高く、そうすることも意図されていません。
確かに、UIImageView
を使用して、画像を中央揃えおよびスケーリングする必要があります。 UIScrollView
を持っているという事実は、これを妨げません:
self.view
を汎用ビューにして、UIImageView
とUIScrollView
の両方をサブビューとして追加します。 Interface Builderですべてが正しく接続されていることを確認し、スクロールビューの背景色を透明にします。
これは、将来の変更に対応するための最もシンプルで柔軟性の高いデザインです。
繰り返し:
UIImage *img = [UIImage imageNamed:@"bg.png"];
view.backgroundColor = [UIColor colorWithPatternImage:img];
ストレッチ
UIImage *img = [UIImage imageNamed:@"bg.png"];
view.layer.contents = img.CGImage;
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)
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!)
}
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")];
マークされた答えは問題ありませんが、画像が引き伸ばされます。私の場合、ストレッチではなく繰り返したい小さなタイル画像がありました。また、黒の背景の問題を解決するには、次のコードが最善の方法でした。
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];
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)
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)
}
}
}