Подтвердить что ты не робот

Фокусное изображение iOS UIView

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

Вот мой код:

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

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

Есть ли пригодность для масштабирования/соответствия UIView/fit для размера modus?

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

вам необходимо обработать изображение перед его добавлением, попробуйте следующее:

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

self.view.backgroundColor = [UIColor colorWithPatternImage:image];

Ответ 3

привет, попробуйте это,

     self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"login.png"]];

Ответ 4

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

//add background
UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg.png"]];
[myView addSubview:background];
[myView sendSubviewToBack:background];
myView.contentMode = UIViewContentModeScaleAspectFit;

Ответ 5

В 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)

Ответ 6

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

self.view.backgroundColor = UIColor(patternImage: UIImage(named:"background.jpg"))

Ответ 7

Я использую следующее расширение в 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)
    }

Ответ 8

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

Ответ 9

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

Ответ 10

Если вид будет иметь тот же размер, вы можете поместить метод в свой AppDelegate.m, который масштабирует фоновое изображение при первом запуске, а затем сохраняет масштабированное изображение в памяти для будущего использования:

UIImage *backgroundImage = nil;
- (void)setBackground:(UIView *)view
{
    if (backgroundImage == nil)
    {
        UIGraphicsBeginImageContext(view.frame.size);
        [[UIImage imageNamed:@"Background"] drawInRect:view.bounds];
        backgroundImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }
    view.backgroundColor = [UIColor colorWithPatternImage:backgroundImage];
}

Спасибо @uneakharsh за помощь!

Ответ 11

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

Ответ 12

Я также хотел сделать это, и я обнаружил, что из-за автоотключения 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:)") }
}

Ответ 13

this.View.BackgroundColor = UIColor.FromPatternImage (UIImage.FromFile ("body_background.png"));