Фоновое изображение iOS UIView - PullRequest
39 голосов
/ 03 апреля 2012

Я хочу иметь UIImage в качестве фонового изображения на UIView.

Вот мой код:

UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"login.png"]];
self.view.backgroundColor = background;
[background release];

Проблема в том, что масштаб не в порядке. Он масштабировался от 640 до 480, поэтому я не могу сказать, что он уверен на 100%, но похоже, что отображается только от 300 до 250 или что-то в этом роде.

Есть ли подгонка к масштабированию / подгонка к UIView / подгонка к размеру?

Ответы [ 13 ]

53 голосов
/ 28 сентября 2012

вам необходимо обработать ваше изображение, прежде чем добавить его, попробуйте это:

UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

self.view.backgroundColor = [UIColor colorWithPatternImage:image];
27 голосов
/ 03 апреля 2012

Здравствуйте, попробуйте это,

     self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"login.png"]];
11 голосов
/ 02 августа 2012

Укажите фактический фон и отправьте его на задний план вашего вида

//add background
UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg.png"]];
[myView addSubview:background];
[myView sendSubviewToBack:background];
myView.contentMode = UIViewContentModeScaleAspectFit;
9 голосов
/ 11 октября 2014

In Swift используйте это ...

    UIGraphicsBeginImageContext(self.view.frame.size)
    UIImage(named: "1.png")?.drawInRect(self.view.bounds)

    var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    self.view.backgroundColor = UIColor(patternImage: image)
8 голосов
/ 03 апреля 2012

В соответствии с API UIColor:

Вы можете использовать цвета рисунка, чтобы установить цвет заливки или обводки, как если бы вы были сплошным цветом.Во время рисования изображение в цвете рисунка выкладывается мозаикой по мере необходимости, чтобы покрыть данную область.

Это означает, что оно пытается создать рисунок из вашего изображения, чтобы заполнить область.Я думаю, что оптимальный способ сделать это - изменить масштаб изображения, чтобы оно соответствовало размеру UIView.

. Здесь есть хороший ответ, как изменить размер изображения во время выполнения:

Самый простой способ изменить размер UIImage?

7 голосов
/ 23 июля 2014

А если вы хотите сделать это быстро:

self.view.backgroundColor = UIColor(patternImage: UIImage(named:"background.jpg"))
2 голосов
/ 07 сентября 2016

Я использую следующее расширение в Swift:

extension UIView{

    func setBackgroundImage(img: UIImage){

        UIGraphicsBeginImageContext(self.frame.size)
        img.drawInRect(self.bounds)
        let patternImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        self.backgroundColor = UIColor(patternImage: patternImage)
    }
}

В коде вы можете использовать так:

if let image = UIImage(named: "HomeBg"){
        self.view.setBackgroundImage(image)
    }
1 голос
/ 20 февраля 2014

В Интерфейсном Разработчике добавьте Image View к View и выберите изображение, которое вы хотите использовать в Attributes inspector.Наконец, сделайте Image View самым первым потомком View, перетащив элемент в Document Outline.

0 голосов
/ 10 июля 2017

Я также хотел сделать это и обнаружил, что из-за autolayout , UIImageView растягивает содержащий UIView, когда я хочу это другим способом: я хочу, чтобы UIImageView взять размер UIView.

Итак, я создал этот класс. Он обновляет фрейм UIImageView в соответствии с контейнером UIView всякий раз, когда он размещается с помощью layoutSubviews.

/**
 * View with an image whose frame is adjusted to the frame of the view. 
 */
class ViewWithImage: UIView {

    let image: UIImageView

    init(image: UIImageView) {
        self.image = image
        super.init(frame: .zero)
        self.addSubview(image)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        updateImageFrame()
    }

    private func updateImageFrame() {
        image.frame = CGRect(origin: .zero, size: self.frame.size)
    }

    required init?(coder: NSCoder) { fatalError("no init(coder:)") }
}
0 голосов
/ 06 октября 2014

Вы можете использовать метод 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")];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...