backgroundColor colorWithPatternImage заканчивается растягиванием, если размер вида изменяется, вместо того, чтобы повторяться?

StackOverflow https://stackoverflow.com/questions/1418735

  •  07-07-2019
  •  | 
  •  

Вопрос

Я устанавливаю фон вида для повторяющегося изображения, используя colorWithPatternImage.Если размер вида изменяется после того, как я установил фон в первый раз, изображение растягивается вместо того, чтобы повторяться для нового размера - есть идеи, как я могу это исправить?

Это то, что я делаю:

  • установите фон представления в viewDidLoad:

    FrameView.backgroundColor = [UIColor colorWithPatternImage:[Имя пользовательского изображения:@"frame-repeat.png"]];

  • возьмите некоторую информацию с сервера, обновите вид, измените размер рамки вида, чтобы она соответствовала новому содержимому (обычно это означает увеличение размера вида).

  • фоновое изображение теперь растягивается, даже если я снова установлю backgroundColor, используя точно такой же код.

Если я не выполняю начальный набор фона, а устанавливаю его только после получения данных с сервера и изменения размера представления, это выглядит великолепно - повторяется и не растягивается.Однако это означает отсутствие фона во время загрузки данных...выглядит уродливо.

Кто-нибудь еще сталкивался с этим?

Спасибо за любую помощь!

Это было полезно?

Решение

Ответ довольно прост, просто позвоните

[[self view] setNeedsDisplay];

в контроллере при изменении размера фрейма (или где бы вы это ни делали, суть в том, чтобы отправить сообщение setNeedsDisplay в представление после изменения фрейма).Если это не сработает - попробуйте установить цвет фона.

И если это не сработает, реализуйте свое собственное пользовательское представление и переопределите в нем метод

- (void) drawRect:(CGRect) rect {
   CGRect myBounds = self.bounds;
   CGContextRef context = UIGraphicsGetCurrentContext();
   [[UIColor colorWithPatternImage:[UIImage imageNamed:@"frame-repeat.png.png"]]set];
   CGContextFillRect(context, myBounds);
}

А затем, после изменения размера, отправьте setNeedsDisplay на ваш просмотр.Это сработает на 100%.

Надеюсь, это было полезно, Павел

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top