[ios] UIImageView에서 색조 색상 사용

나만의 하위 클래스가 UIButton있습니다. 나는 UIImageView그것에 추가하고 이미지를 추가합니다. 이미지 위에 틴트 컬러로 칠하고 싶은데 작동하지 않습니다.

지금까지 :

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        self.backgroundColor = [UIColor clearColor];
        self.clipsToBounds = YES;

        self.circleView = [[UIView alloc]init];
        self.circleView.backgroundColor = [UIColor whiteColor];
        self.circleView.layer.borderColor = [[Color getGraySeparatorColor]CGColor];
        self.circleView.layer.borderWidth = 1;
        self.circleView.userInteractionEnabled = NO;
        self.circleView.translatesAutoresizingMaskIntoConstraints = NO;
        [self addSubview:self.circleView];

        self.iconView = [[UIImageView alloc]init];
        [self.iconView setContentMode:UIViewContentModeScaleAspectFit];
        UIImage * image = [UIImage imageNamed:@"more"];
        [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
        self.iconView.image = image;
        self.iconView.translatesAutoresizingMaskIntoConstraints = NO;
        [self.circleView addSubview:self.iconView];
        ...

그리고 선택에 :

- (void) setSelected:(BOOL)selected
{
    if (selected) {
        [self.iconView setTintColor:[UIColor redColor]];
        [self.circleView setTintColor:[UIColor redColor]];
    }
    else{
        [self.iconView setTintColor:[UIColor blueColor]];
        [self.circleView setTintColor:[UIColor blueColor]];
    }
}

내가 뭘 잘못 했어? (이미지의 색상은 항상 원래와 동일하게 유지됩니다.)



답변

이 코드 대신 :

[image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

다음이 있어야합니다.

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

Swift 4.1 에서 사용

image = UIImage(named: "name")!.withRenderingMode(.alwaysTemplate)


답변

자산에 이것을 설정할 수도 있습니다. 이미지에 모든 흰색 픽셀 + 투명이 포함되어 있는지 확인하십시오.
여기에 이미지 설명 입력


답변

(@Zhaolong Zhong 게시물을 편집 할 수 없음)

swift 3.0 에서는 다음을 수행 할 수 있습니다.

let image = UIImage(named: "your_image_name")!.withRenderingMode(.alwaysTemplate)

yourImageView.image = image

yourImageView.tintColor = UIColor.blue


답변

Swift 2.0 이상에서는 다음을 수행 할 수 있습니다.

let image = UIImage(named: "your_image_name")!.imageWithRenderingMode(.AlwaysTemplate)

yourImageView.image = image

yourImageView.tintColor = UIColor.blueColor()


답변

Swift 버전 : 5.2

let tintableImage = UIImage(named: "myImage")?.withRenderingMode(.alwaysTemplate)
imageView.image = tintableImage
imageView.tintColor = UIColor.red

목표 C

self.imgView.image = [self.imgView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[self.imgView setTintColor:[UIColor darkGrayColor]];

또는

자산에 이것을 설정할 수도 있습니다.

여기에 이미지 설명 입력


답변

한 단계 더. 이것은 UIImageView의 드롭 인 서브 클래스입니다. (원래 질문에 대한 정확한 해결책은 아닙니다.) 클래스 이름을 TintedImageView로 설정하여 Interface Builder에서 사용하십시오. 색조 색상이 변경되면 디자이너 내부에서 실시간으로 업데이트됩니다.

(Swift 3.1, Xcode 8.3)

import UIKit

@IBDesignable class TintedImageView: UIImageView {
    override func prepareForInterfaceBuilder() {
        self.configure()
    }

    override func awakeFromNib() {
        super.awakeFromNib()

        self.configure()
    }

    @IBInspectable override var tintColor: UIColor! {
        didSet {
            self.configure()
        }
    }

    private func configure() {
        self.image = self.image?.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
    }
}


답변

imageView 만들기

    let imageView = UIImageView(frame: frame!)
    imageView.contentMode = .ScaleAspectFit
    imageView.tintColor = tintColor

이미지 만들기

    let mainBundle = NSBundle.mainBundle()
    var image = UIImage(named: filename!, inBundle: mainBundle, compatibleWithTraitCollection: nil)
    image = image?.imageWithRenderingMode(.AlwaysTemplate)

함께 연결

    imageView?.image = image

그것을 표시

view.addSubview(imageView)