Ich bemerkte , dass , wenn ich ein weißen oder schwarzen Platz UIImage
in eine UISegmentedControl
automatisch Farbmasken es den Farbton der segmentierten Kontrolle anzupassen. Ich fand das wirklich cool und fragte mich, ob ich das auch woanders machen könnte. Zum Beispiel habe ich eine Reihe von Knöpfen, die eine einheitliche Form, aber unterschiedliche Farben haben. Könnte ich, anstatt für jede Schaltfläche ein PNG zu erstellen, diese Farbmaskierung verwenden, um für alle das gleiche Bild zu verwenden, aber dann eine Farbtonfarbe oder etwas anderes festlegen, um ihre tatsächliche Farbe zu ändern?
294
Antworten:
Ab iOS 7 gibt es eine neue Methode
UIImage
zum Festlegen des Rendermodus. Wenn Sie den Rendering-Modus verwenden, kannUIImageRenderingModeAlwaysTemplate
die Bildfarbe durch die Farbtonfarbe der Schaltfläche gesteuert werden.Ziel c
Schnell
quelle
tintColor
zu dunkel sind, stellen Sie sicher, dassadjustsImageWhenHighlighted
NEIN ist. (Oder in IB: "Highlighted Adjusts Image" ist deaktiviert.)Wie Ric bereits in seinem Beitrag erwähnt hat, können Sie den Rendermodus im Code einstellen. Sie können dies auch direkt im Bildkatalog tun, siehe beigefügtes Bild unten. Stellen Sie einfach das
Render As
aufTemplate Image
Vorsichtsmaßnahme Ich hatte Probleme mit iOS 7 und diesem Ansatz. Wenn Sie also auch iOS 7 verwenden, möchten Sie dies möglicherweise auch im Code tun, um sicherzugehen, wie hier beschrieben .
quelle
Benutzerdefinierte Schaltflächen werden in ihren jeweiligen Bildfarben angezeigt. Wenn Sie den Schaltflächentyp im Storyboard (oder
UIButtonTypeSystem
im Code) auf "System" setzen , wird das Bild der Schaltfläche mit der Standardfarbe getönt.(getestet auf iOS9, Xcode 7.3)
quelle
Sie müssen den Bildwiedergabemodus einzustellen ,
UIImageRenderingModeAlwaysTemplate
um das zu haben ,tintColor
die UIImage beeinflussen. Hier ist die Lösung in Swift:SWIFT 4x
quelle
Wenn Sie eine benutzerdefinierte Schaltfläche mit einem Hintergrundbild haben. Sie können die Farbtonfarbe Ihrer Schaltfläche festlegen und das Bild wie folgt überschreiben.
Wählen Sie in Assets den Schaltflächenhintergrund aus, für den Sie die Farbtonfarbe festlegen möchten.
Stellen Sie im Attributinspektor des Bildes den Wert für "Vorlagenbild" ein.
Wenn Sie jetzt Ihre
button.tintColor = UIColor.red
Taste einstellen, wird sie rot angezeigt.quelle
In Swift können Sie das so machen:
Dann in Ihrer viewDidLoad
Und um die Farbe zu ändern
EDIT Xcode 8 Jetzt können Sie auch nur die Rendering - Modus des Bildes in Ihrem .xcassets auf Vorlage Bild und dann brauchen Sie nicht zu erklären , es speziell im
var exampleImage
mehrquelle
Sie wissen nicht genau, was Sie möchten, aber diese Kategoriemethode maskiert ein UIImage mit einer bestimmten Farbe, sodass Sie ein einzelnes Bild haben und seine Farbe nach Belieben ändern können.
ImageUtils.h
ImageUtils.m
Importieren Sie die Kategorie ImageUtils und machen Sie so etwas ...
quelle
kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast
aufCGBitmapContextCreate
UIDevice
Klasse verwenden:CGFloat scale = [UIScreen mainScreen].scale; CGFloat width = self.size.width * scale; CGFloat height = self.size.height * scale;
Diescale
Eigenschaft ist ab iOS 4.0 vorhanden.scale
Wert verwenden, wenn derUIImage
erstellt wird:UIImage *coloredImage = [UIImage imageWithCGImage:cImage scale:scale orientation:self.imageOrientation];
Swift 4 mit customType:
quelle
Für Xamarin.iOS (C #):
quelle
Swift 3 :
Diese Lösung kann bequem sein, wenn Sie Ihr Image bereits über den xCode Interface Builder festgelegt haben. Grundsätzlich haben Sie eine Erweiterung, um ein Bild einzufärben:
Anschließend können Sie diese UIButton- Erweiterung vorbereiten , um das Bild für einen bestimmten Status einzufärben :
Verwendungszweck:
PS (funktioniert auch in Tabellenzellen gut, Sie müssen die
setNeedDisplay()
Methode nicht aufrufen , die Änderung der Farbe erfolgt sofort aufgrund der UIImage- Erweiterung.quelle
Wenn Sie Ihr Bild manuell maskieren möchten, finden Sie hier aktualisierten Code, der mit Retina-Bildschirmen funktioniert
quelle
Du solltest es versuchen
Nach dem Einstellen des Rahmens
quelle
Swift 3.0
quelle
Ändern Sie das Farbtonbild oder die Farbfarbe der Bildansicht. Schnell:
quelle
Keiner der oben genannten Punkte hat bei mir funktioniert, da der Farbton nach dem Klicken gelöscht wurde. Ich musste benutzen
quelle