Как заполнить фоновое изображение UIView

У меня есть 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 для UIImageView и масштабирования изображения. Тот факт, что у вас есть UIScrollView , не мешает этому:

Сделайте self.view общим представлением, затем добавьте UIImageView и UIScrollView качестве подзонов. Убедитесь, что все правильно подключено в Interface Builder, и сделайте фоновый цвет прокрутки прозрачным.

Это IMHO – самый простой и гибкий дизайн для будущих изменений.

Повторение:

 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!) } 

Вы можете использовать метод 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")]; 

Для 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) 

Отмеченный ответ прекрасен, но изображение растягивается. В моем случае у меня был небольшой fragment изображения, который я хотел повторить, не растягиваясь. И следующий код был лучшим способом для меня решить проблему черного фона:

 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 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) } } } 
Interesting Posts

C ++ эквивалентно Java BlockingQueue

Есть ли способ подключить два монитора к одному порту VGA для ноутбука?

Каковы некоторые примеры использования символьных литералов в Scala?

Как установить точку останова в GDB, где функция возвращается?

Qt: изменение размера QLabel, содержащего QPixmap, сохраняя его соотношение сторон

iPhone: программно сжимать записанное видео для совместного использования?

Солярное поколение и программное обеспечение с открытым исходным кодом

Swift – Как преобразовать String в Double

Как установить частный модуль NPM без моего собственного реестра?

Как импортировать библиотеку материалов в Android Studio?

Удаление повторяющихся строк без сортировки

Как добавить индексы в таблицы MySQL?

Как я могу создать приложение .NET Windows Forms, которое работает только в системном трее?

Отправлять данные из активности в fragment в android

Эквивалентный код CreateObject в C #

Давайте будем гением компьютера.