Est-il possible de modifier le renderingMode
d'une UIImage
à partir d'un storyboard ou d'un éditeur xib?
Le but est d'appliquer tintColor
à l'objet UIImageView
particulier.
Est-il possible de modifier le renderingMode
d'une UIImage
à partir d'un storyboard ou d'un éditeur xib?
Le but est d'appliquer tintColor
à l'objet UIImageView
particulier.
Définissez tintColor & Class dans Storyboard.
//
// TintColoredImageView.swift
// TintColoredImageView
//
// Créé par Dmitry Utmanov le 14/07/16.
// Droits d'auteur © 2016 Dmitry Utmanov. Tous droits réservés.
//
import UIKit
@IBDesignable class TintColoredImageView: UIImageView {
override var image: UIImage? {
didSet {
let _tintColor = self.tintColor
self.tintColor = nil
self.tintColor = _tintColor
}
}
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
override init(image: UIImage?) {
super.init(image: image)
initialize()
}
override init(image: UIImage?, highlightedImage: UIImage?) {
super.init(image: image, highlightedImage: highlightedImage)
initialize()
}
func initialize() {
let _tintColor = self.tintColor
self.tintColor = nil
self.tintColor = _tintColor
}
}
C'est très facile à réparer
Il suffit de créer la classe UIImageViewPDF et de l'utiliser dans votre storyboard
IB_DESIGNABLE
@interface UIImageViewPDF : UIImageView
@end
@implementation UIImageViewPDF
- (void) didMoveToSuperview
{
[super didMoveToSuperview];
self.image = [self.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
id color = self.tintColor;
self.tintColor = color;
}
@end
Une autre solution est de créer une sous-classe de UIImageView
:
final class TemplateImageView: UIImageView {
override func awakeFromNib() {
super.awakeFromNib()
guard let oldImage = image else { return }
image = nil
image = oldImage.withRenderingMode(.alwaysTemplate)
}
}
Ensuite, il suffit de définir la classe dans l'Interface Builder sur TemplateImageView
.
Manière simple d'être configuré à partir du Storyboard :
@IBDesignable
public class CustomImageView: UIImageView {
@IBInspectable var alwaysTemplate: Bool = false {
didSet {
if alwaysTemplate {
self.image = self.image?.withRenderingMode(.alwaysTemplate)
} else {
self.image = self.image?.withRenderingMode(.alwaysOriginal)
}
}
}
}
Fonctionne bien sur iOS 10 et Swift 3
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.