Как изменить tintColor изображения в UIButton с помощью imageEdgeInsets?

У меня есть UIButton в моем приложении objective-c. Моя кнопка была изменена, добавив текст и изображение, например:

- (void)centerButtonAndImageWithSpacing:(CGFloat)spacing {
     CGFloat insetAmount = spacing / 2.0;
     self.imageEdgeInsets = UIEdgeInsetsMake(0, -insetAmount, 0, insetAmount);
     self.titleEdgeInsets = UIEdgeInsetsMake(0, insetAmount, 0, -insetAmount);
     self.contentEdgeInsets = UIEdgeInsetsMake(0, insetAmount, 0, insetAmount);
}

А затем я добавляю изображение с этим кодом:

[self.myButton setImage:[UIImage imageNamed:@"imageButton.png"] forState:UIControlStateNormal];

Я хочу изменить tintColor изображения, но когда я пытаюсь это изменить, мой код не работает:

[self.myButton setTintColor:[UIColor redColor]];

Я пытаюсь использовать этот код, но не работает:

UIImage* img = [UIImage imageNamed:imageName];
icon.image = [img imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
icon.tintColor = [UIColor redColor];

У меня есть это:  введите описание изображения здесь

Я хочу получить это:  введите описание изображения здесь

Как я мог изменить цвет imageButton?


person user3745888    schedule 09.01.2017    source источник
comment
См. Эту ссылку stackoverflow.com/ questions / 12396236 /   -  person Piyush    schedule 09.01.2017


Ответы (6)


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

1. Перетащите изображение на Assets.xcassets и в инспекторе атрибутов активов измените атрибут «Визуализировать как» на Template Image.

введите здесь описание изображения

2.И установите требуемый цвет оттенка, как показано ниже.

icon.tintColor = [UIColor redColor];

Надеюсь, это поможет вам.

person Vishnuvardhan    schedule 09.01.2017

Решение изменить свойство tintColor было setImage с renderMode:

 imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate

С помощью этого кода:

[self.myButton setImage:[[UIImage imageNamed:@"myImageButton.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];

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

 self.myButton.tintColor = [UIColor redColor];
person user3745888    schedule 10.01.2017

Измените UIButtonType на UIButtonTypeCustom в Интерфейсном Разработчике или программно с помощью

 UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

Измените атрибуты самостоятельно и воссоздайте закругленные углы.

myButton.backgroundColor = [UIColor redColor];
myButton.layer.borderColor = [UIColor blackColor].CGColor;
myButton.layer.borderWidth = 0.5f;
myButton.layer.cornerRadius = 10.0f;

дайте мне знать статус ..

person Purushothaman    schedule 09.01.2017
comment
Как я могу применить это, если моя кнопка - это IBOutlet, добавленный в раскадровку? - person user3745888; 09.01.2017
comment
@ user3745888 Когда вы выберете кнопку в раскадровке, вы увидите тип, просто измените его на пользовательский - person Piyush; 09.01.2017
comment
Я добавил это, но это меняет фон, это не меняет цвет uiimage .. - person user3745888; 09.01.2017

Создайте слой и установите желаемый цвет и маску в ImageView на вашей кнопке, как это.

for (UIView *view in myButton.subviews) {
        if ([view isKindOfClass:[UIImageView class]]) {
            CALayer *mask = [CALayer layer];
            mask.backgroundColor = [UIColor redColor].CGColor;
            view.layer.mask = mask;
        }
    }
person Syed Qamar Abbas    schedule 09.01.2017

Swift 4 и 4.2

let img = UIImage.init(named: "buttonName")?.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
            btn.setImage(img, for: .normal)
            btn.tintColor = .gray

}

введите здесь описание изображения

person Akbar Khan    schedule 21.02.2019

Swift 5

let examButton = UIButton(image: UIImage(systemName: "rectangle.dock")!, tintColor: .systemRed, target: self, action: #selector(showExamController))

examButton.setTitleColor(.label, for: .normal)
examButton.setTitle("   12K", for: .normal)
person kAiN    schedule 26.04.2020