Как заполнить фоновое изображение 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 ++

Как управлять исходным IP-адресом пакета ZeroMQ на компьютере с несколькими IP-адресами?

Какие шаблоны проектирования могут быть применены к проблеме настроек конфигурации?

Ограничить соотношение сторон в диаграмме DataVisualization WindowsForms

Плюсы / минусы баз данных на основе документов и реляционных баз данных

Как использовать Thrust для сортировки строк матрицы?

Разница во времени в C ++

изображение перемещается по hover – проблема непрозрачности хрома

Почему изменение возвращаемой переменной в блоке finally не изменяет возвращаемое значение?

Как я могу оправиться от хард-гена push -f origin master?

Отправка переменных в макет в Zend Framework

Как сделать перемещение изображения во время прослушивания нажатия клавиши на Java.

Легко ли построить монитор с экрана latop?

Как выполнить команду очистки на сервере tmux / сеансе?

Opencv виртуальная камера, вращающаяся / перевод для просмотра с высоты птичьего полета

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