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
빠른 버전: 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]];
또는
자산에 이 옵션을 설정할 수도 마찬가지입니다.
swift 2.0+에서는 다음을 수행할 수 있습니다.
let image = UIImage(named: "your_image_name")!.imageWithRenderingMode(.AlwaysTemplate)
yourImageView.image = image
yourImageView.tintColor = UIColor.blueColor()
한 걸음 더.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)
}
}
이미지 보기 만들기
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)
말한 모든 것이 맞습니다. 제 기여 모든 UIImageView에 적용할 수 없거나 적용하지 않으려면 효율성을 위해 ONCE(또는 테이블 뷰 셀의 경우)를 렌더링해야 합니다.
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
}
그리고 이 UI 이미지의 모든 UI 요소로 설정합니다.
@모드몰리엔스의 대답은 그저 효과가 있어야 합니다.
그러나 여전히 문제가 있는 경우 UI 이미지 보기에 적용할 색조 색상이 인터페이스 작성기에 정의된 색조 색상과 다른지 확인하십시오.
언급URL : https://stackoverflow.com/questions/22170688/using-tint-color-on-uiimageview
'programing' 카테고리의 다른 글
Ruby 콘솔에서 사용자 고안 (0) | 2023.06.03 |
---|---|
Mongodb - 배열 필드의 모든 요소를 삭제하는 적절한 방법? (0) | 2023.06.03 |
iPhone 시뮬레이터에 .ipa 파일을 설치하는 방법 (0) | 2023.06.03 |
XAML Column Definition에서 *(아스터리스크)의 의미는 무엇입니까? (0) | 2023.06.03 |
PostgreSQL로 데이터베이스 간 쿼리를 수행할 수 있습니까? (0) | 2023.06.03 |