iOS - маскирование с помощью colorWithPatternImage без повторения в файле.png

Я пытаюсь заполнить рисунком мою маску изображений (.png)

UIImageView *imageView = (UIImageView*)_maskView.contentView;
imageView.image = [imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
imageView.tintColor = [UIColor colorWithPatternImage:image];

Теперь я сделал то, что хочу. Но с проблемой. Вот скриншот:

Скриншот

На этом скриншоте у меня есть эти слои спереди назад;

  1. mainImageView -> содержит изображение водопада.
  2. maskView -> лежит в верхней части mainImageView. Это пользовательский UIView. Он содержит imageView с именем contentView.
  3. contentView -> UIImageView. Подвид maskView. Содержит изображение маски. Я использую код colorWithPatternImage на его tintColor.

Как вы можете видеть, мое изображение шаблона является мозаичным (или повторяющимся, или как вы называете).

Я попытался изменить размер изображения шаблона к размеру imageView, также попытался изменить размеры к высоким разрешениям как 4000X4000 без удачи.

Пробовал что то типа

self.layer.contents = (id)[UIImage imageNamed:@"freshBackground.png"].CGImage;

но этот код заполняет весь imageView.

Сейчас у меня нет вариантов. Может ли кто-нибудь помочь мне в этом? Спасибо.

1 ответ

Я могу подтвердить, что у меня не было хорошего опыта использования colorWithPattern с большими изображениями. Он всегда был разработан для использования с маленькими изображениями. Это особенно не в состоянии загрузить 2x и 3x изображения самостоятельно. Во время моей реализации я использовал,

self.view.layer.contents = (id)[UIImage imageNamed:@"freshBackground.png"].CGImage;

Что касается применения изображения ко всему основному представлению, вы также можете рассмотреть подход, заключающийся в создании beizerPath и вычитании его из основного представления, как показано здесь, вместо использования маски.

Другие вопросы по тегам