Как заполнить фоновое изображение UIView
у меня есть UIView
и я установил фоновое изображение таким образом:
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sfond-appz.png"]];
моя проблема заключается в том, что back-image не центрируется внутри представления, но он воспроизводится несколько раз, чтобы заполнить все представление. Есть ли способ центрировать изображение внутри uiview и scretch, чтобы иметь размер экрана?
примечание: Я не могу использовать UIImageView
для фоновой причины у меня есть scrollview
.
10 ответов:
вам нужно обработать изображение заранее, чтобы сделать центрированное и растянутое изображение. Попробуйте это:
UIGraphicsBeginImageContext(self.view.frame.size); [[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); self.view.backgroundColor = [UIColor colorWithPatternImage:image];
на Свифт использовать это...
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") }
The
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!) }
можно использовать UIGraphicsBeginImageContext метод, чтобы установить размер изображения же, что и вид.
синтаксис : 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")];
для 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)
отмеченный ответ в порядке, но это делает изображение растянутым. В моем случае у меня было небольшое изображение плитки, которое я хотел повторить, а не растягивать. И следующий код был лучшим способом для меня, чтобы решить проблему черного фона:
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) } } }