Как заполнить фоновое изображение UIView
У меня есть UIView
и я установил фоновое изображение таким образом:
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sfond-appz.png"]];
Моя проблема заключается в том, что обратное изображение не сосредоточено внутри представления, но оно несколько раз воспроизводится, чтобы заполнить все представления. Есть ли способ центрировать изображение внутри uiview и scretch, чтобы иметь размер экрана?
Примечание. Я не могу использовать UIImageView
для фона, потому что у меня есть scrollview
.
- Добавление изображения в Jbutton с ярлыком переднего плана
- Ввод фона на iOS4 для воспроизведения аудио
- Использование памяти фонового изображения Android
- Как программировать круглые углы и задавать произвольные фоновые цвета
- Android OpenGL ES Прозрачный фон
- Android: сохранить сервис, когда приложение убито
- Может ли приложение phonegap работать в фоновом режиме?
- java swing background image
- Как установить фоновый backgroundRadius для NSString на iOS7
- Исправлено фокусное изображение привязки / исчезновение в хроме при сочетании с преобразованием css
- Как определить, когда приложение Android переходит на задний план и возвращается на передний план
Вам нужно обработать изображение заранее, чтобы сделать центрированное и растянутое изображение. Попробуй это:
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) } } }