Как отключить синее наложение на изображение, которое я использую с моей UIButton? - PullRequest
0 голосов
/ 08 апреля 2020

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

Я установил кнопку UIKit в своей раскадровке, добавил для этого как IBAction, так и IBOutlet Кнопка в моем сценарии (класс? независимо от того, какие отдельные файлы .swift вызываются в проекте), установить IBO для наследования от UIButton, все в классе ViewController. В функции viewDidLoad у меня есть

button.setImage(UIImage (named: "logo"), for: .normal)

и еще одна строка кодера, относящаяся к UILabel (там все в порядке). Ниже функции viewDidLoad у меня есть массив, а затем IBA с небольшим количеством кода, который перетасовывает массив и выплевывает индексированное пятно на экран.

Я пытался исправить это в течение нескольких дней Теперь, предполагая, что я понял все, что я прочитал, я узнал, что UIImages являются неизменяемыми (не могут быть изменены), поэтому это говорит мне, что мне нужно исправить это при объявлении этого в viewDidLoad. Я также узнал, что синий цвет используется по умолчанию в текущем состоянии swift / xcode, и что это проблема режима рендеринга, просто отключив ее, можно решить проблему. Я не могу на всю жизнь соединить последние несколько точек и выяснить, как на самом деле сказать XCode просто использовать предоставленное мной изображение.

Конечно, я ищу решение для кода, но знание того, почему это будет работать, и любые исправления / пояснения к тому, что я думаю, я узнал, будет еще более ценно, так что я могу больше помогать себе в будущем.

Заранее спасибо. -Cyre

1 Ответ

4 голосов
/ 08 апреля 2020

Поскольку вы не указали, я предполагаю, что для кнопки «Тип» в раскадровке установлено значение «Система» (тип кнопки по умолчанию при перетаскивании нового UIButton в раскадровках).

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

UIImage s по умолчанию имеют renderingMode из automatic, что означает Фактический эффективный режим рендеринга, который принимает изображение, определяется тем, что использует изображение (в данном случае UIButton).

Однако можно создать экземпляр UIImage с renderingMode из alwaysOriginal, чтобы он никогда не обрабатывался как шаблонное изображение. Есть несколько способов сделать это.

1. Программно

Вы можете создать новый объект изображения с новым режимом рендеринга в коде, взяв уже созданное изображение:

UIImage(named: "logo")

и вызвав withRenderingMode(_:) чтобы вернуть вам новый UIImage объект, который вы затем установили на свою кнопку:

let logoImage = UIImage(named: "logo")
let logoImageAlwaysOriginal = logoImage?.withRenderingMode(.alwaysOriginal)
button.setImage(logoImageAlwaysOriginal, for: .normal)

2. Каталог активов

Более простой способ, чем использовать указанный выше путь программирования c, - просто изменить тип рендеринга изображения по умолчанию в вашем каталоге ресурсов. Нажмите на изображение, которое вы хотите изменить в каталоге активов (в данном случае «lo go»), затем go в Инспекторе атрибутов (сочетание клавиш: option + command + 4) и измените «Render As» атрибут "Исходное изображение". Теперь, когда вы используете или получаете это изображение из каталога ресурсов (либо в раскадровках, либо в коде), изображение будет иметь режим рендеринга .alwaysOriginal.


. Вы можете сделать любое из следующих действий: вышеупомянутые параметры и сохраните тип системной кнопки, ИЛИ вы можете просто изменить тип кнопки на «Пользовательский» в раскадровке, поскольку пользовательские кнопки не применяют режим визуализации шаблона к своим изображениям по умолчанию. Однако вы теряете некоторые приятные вещи, когда не используете тип системной кнопки, например, цвет текста больше не берется из цвета оттенка кнопки, и кнопка не имеет приятной анимации затухания при нажатии.

...