Как заполнить фоновое изображение UIView
У меня есть UIView
, и я установил фоновое изображение таким образом:
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sfond-appz.png"]];
Моя проблема заключается в том, что обратное изображение не сосредоточено внутри представления, но оно несколько раз воспроизводилось для заполнения всего представления. Есть ли способ центрировать изображение внутри uiview и scretch, чтобы иметь размер экрана?
Примечание. Я не могу использовать UIImageView
для причины фона. У меня есть scrollview
.
Ответы
Ответ 1
Вам нужно обработать изображение заранее, чтобы сделать центрированное и растянутое изображение.
Попробуйте следующее:
UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.view.backgroundColor = [UIColor colorWithPatternImage:image];
Ответ 2
Для 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")
}
Ответ 3
Метод colorWithPattern:
действительно предназначен для создания шаблонов из изображений. Таким образом, требуемая настройка, скорее всего, невозможна, и она не должна быть такой.
Действительно, вам нужно использовать UIImageView
для центрирования и масштабирования изображения. Тот факт, что у вас есть UIScrollView
, не мешает этому:
Сделайте self.view
общий вид, затем добавьте как теги UIImageView
, так и UIScrollView
в качестве подзонов. Убедитесь, что все правильно подключено в Interface Builder, и сделайте фоновый цвет прокрутки прозрачным.
Это IMHO - самый простой и гибкий дизайн для будущих изменений.
Ответ 4
Повторить:
UIImage *img = [UIImage imageNamed:@"bg.png"];
view.backgroundColor = [UIColor colorWithPatternImage:img];
Натяжные
UIImage *img = [UIImage imageNamed:@"bg.png"];
view.layer.contents = img.CGImage;
Ответ 5
Для 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)
Ответ 6
Вы можете использовать метод UIGraphicsBeginImageContext, чтобы установить размер изображения таким же, как и у просмотра.
Синтаксис: void UIGraphicsBeginImageContext (размер CGSize);
#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")];
Ответ 7
Для 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)
Ответ 8
Отмеченный ответ в порядке, но изображение растягивается.
В моем случае у меня был небольшой фрагмент изображения, который я хотел повторить, не растягиваясь.
И следующий код был лучшим способом решить проблему черного фона:
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];
Ответ 9
Правильный способ сделать в Swift 3.x
Необходимо и важно написать это в 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!)
}
Ответ 10
Решение 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)
}
}
}