Я заметил , что когда я устанавливаю белый или черные UIImage
в UISegmentedControl
нем автоматически цветов масок , чтобы соответствовать цветовому тону сегментированного управления. Я думал, что это действительно круто, и мне было интересно, смогу ли я сделать это в другом месте. Например, у меня есть несколько кнопок, которые имеют одинаковую форму, но разные цвета. Вместо того, чтобы делать PNG для каждой кнопки, могу ли я как-то использовать эту цветовую маскировку, чтобы использовать одно и то же изображение для всех них, но затем установить цвет оттенка или что-то, чтобы изменить их фактический цвет?
294
Ответы:
Начиная с iOS 7, есть новый метод
UIImage
для указания режима рендеринга. Использование режима рендерингаUIImageRenderingModeAlwaysTemplate
позволит цвету изображения управлять цветом оттенка кнопки.Objective-C
стриж
источник
tintColor
слишком темно, убедитесь, чтоadjustsImageWhenHighlighted
нет. (Или в IB: «Выделенное изображение настраивается» не отмечено.)Как уже упоминал Рик в своем посте, вы можете установить режим рендеринга в коде, вы также можете сделать это прямо в каталоге изображений, см. Прикрепленное изображение ниже. Просто установите
Render As
наTemplate Image
Будьте у меня проблемы с iOS 7 и таким подходом. Так что, если вы используете iOS 7 также, вы можете сделать это в коде, чтобы быть уверенным, как описано здесь .
источник
Пользовательские кнопки отображаются в соответствующих цветах изображения. Если для кнопки установить тип «Система» в раскадровке (или
UIButtonTypeSystem
в коде), изображение кнопки будет отображаться с оттенком цвета по умолчанию.(протестировано на iOS9, Xcode 7.3)
источник
Вы должны установить режим рендеринга изображений
UIImageRenderingModeAlwaysTemplate
, чтобы иметь возможностьtintColor
влиять на UIImage. Вот решение в Swift:SWIFT 4x
источник
Если у вас есть пользовательская кнопка с фоновым изображением. Вы можете установить цвет оттенка вашей кнопки и переопределить изображение следующим.
В активах выберите фон кнопки, которую вы хотите установить оттенок цвета.
В инспекторе атрибутов изображения установите значение render как «Шаблон изображения»
Теперь, когда вы установите
button.tintColor = UIColor.red
кнопку, она будет отображаться красным цветом.источник
В Swift вы можете сделать это так:
Тогда по вашему мнению DidLoad
И чтобы изменить цвет
EDIT Xcode 8 Теперь вы можете просто рендеринга режим изображения в ваших .xcassets для шаблона изображения и тогда вам не нужно специально объявить его в
var exampleImage
большеисточник
Не уверен, что именно вы хотите, но этот метод категории будет маскировать UIImage с указанным цветом, чтобы вы могли иметь одно изображение и изменить его цвет на любой другой.
ImageUtils.h
ImageUtils.m
Импортируйте категорию ImageUtils и сделайте что-то вроде этого ...
источник
kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast
наCGBitmapContextCreate
UIDevice
класса: свойство существует как из прошивки 4.0.CGFloat scale = [UIScreen mainScreen].scale; CGFloat width = self.size.width * scale; CGFloat height = self.size.height * scale;
scale
scale
значение приUIImage
создании:UIImage *coloredImage = [UIImage imageWithCGImage:cImage scale:scale orientation:self.imageOrientation];
Swift 4 с customType:
источник
Для Xamarin.iOS (C #):
источник
Свифт 3 :
Это решение может быть удобным, если вы уже установили изображение через конструктор интерфейса xCode. В основном у вас есть одно расширение для раскрашивания изображения:
Затем вы можете подготовить это расширение UIButton, чтобы раскрасить изображение для определенного состояния:
Использование:
PS (работает хорошо и в ячейках таблицы, вам не нужно вызывать
setNeedDisplay()
метод, изменение цвета происходит немедленно из-за расширения UIImage ..источник
Если вы хотите вручную замаскировать свое изображение, вот обновленный код, который работает с экранами сетчатки
источник
Ты должен попытаться
После настройки кадра
источник
Swift 3.0
источник
Изменение цвета изображения кнопки или вида изображения Swift:
источник
Ничто из вышеперечисленного не помогло мне, потому что оттенок был очищен после щелчка. Я должен был использовать
источник