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()
목표 C
self.imgView.image = [self.imgView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[self.imgView setTintColor:[UIColor darkGrayColor]];
One step further. This is a drop-in subclass of UIImageView. (Not exact solution for original question.) Use in Interface Builder by setting class name to TintedImageView. Updates in real-time inside the designer as tint color changes.
(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)
}
}
Make the imageView
let imageView = UIImageView(frame: frame!)
imageView.contentMode = .ScaleAspectFit
imageView.tintColor = tintColor
Make the image
let mainBundle = NSBundle.mainBundle()
var image = UIImage(named: filename!, inBundle: mainBundle, compatibleWithTraitCollection: nil)
image = image?.imageWithRenderingMode(.AlwaysTemplate)
Wire them together
imageView?.image = image
Display it
view.addSubview(imageView)
all said is correct. my contribution If You cannot / dont want to apply to every UiImageView, OR for efficiency You need to render ONCE (or example for cells of tableviews)
func tint(with color: UIColor) -> UIImage {
var image = withRenderingMode(.alwaysTemplate)
UIGraphicsBeginImageContextWithOptions(size, false, scale)
color.set()
image.draw(in: CGRect(origin: .zero, size: size))
image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
And set to all UI elements this UIImage.
@odemolliens answer should just work.
But if you are still having issues, make sure that the tint color you are applying to the UIImageView is different from the one defined in the Interface Builder.
참고URL : https://stackoverflow.com/questions/22170688/using-tint-color-on-uiimageview
'IT박스' 카테고리의 다른 글
.NET을 사용하여 디렉토리에서 3 개월 이상 된 파일 삭제 (0) | 2020.08.17 |
---|---|
Android : 백 스택에서 모든 이전 활동 제거 (0) | 2020.08.17 |
몽구스는 왜 항상 내 컬렉션 이름 끝에 s를 추가합니까? (0) | 2020.08.16 |
ActionBarCompat : java.lang.IllegalStateException : Theme.AppCompat를 사용해야합니다. (0) | 2020.08.16 |
사용하는 방법 (0) | 2020.08.16 |