흰색이나 검은 색을 UIImage
넣을 UISegmentedControl
때 세그먼트 컨트롤의 색조와 일치하도록 자동으로 컬러 마스크됩니다. 나는 이것이 정말로 시원하다고 생각했고, 내가 다른 곳에서도 이것을 할 수 있는지 궁금했다. 예를 들어, 모양이 균일하지만 색상이 다양한 버튼이 많이 있습니다. 각 버튼에 PNG를 만드는 대신이 색상 마스킹을 사용하여 모든 이미지에 동일한 이미지를 사용할 수 있지만 색조 또는 실제 색상을 변경하기 위해 무언가를 설정할 수 있습니까?
답변
iOS 7부터 UIImage
렌더링 모드를 지정 하는 새로운 방법이 있습니다. 렌더링 모드 UIImageRenderingModeAlwaysTemplate
를 사용하면 버튼의 색조 색상으로 이미지 색상을 제어 할 수 있습니다.
목표 -C
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *image = [[UIImage imageNamed:@"image_name"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[button setImage:image forState:UIControlStateNormal];
button.tintColor = [UIColor redColor];
빠른
let button = UIButton(type: .custom)
let image = UIImage(named: "image_name")?.withRenderingMode(.alwaysTemplate)
button.setImage(image, for: .normal)
button.tintColor = UIColor.red
답변
Ric이 그의 게시물 에서 이미 언급했듯이 코드에서 렌더링 모드를 설정할 수 있으며 이미지 카탈로그에서 직접이를 수행 할 수도 있습니다 (아래 첨부 된 이미지 참조). 그냥 설정 Render As
에Template Image
주의 사항 iOS 7 및이 방법에 문제가 있습니다. 따라서 iOS 7을 사용하는 경우 여기에 설명 된대로 확실하게 코드로 수행 할 수 있습니다 .
답변
사용자 정의 버튼 은 해당 이미지 색상으로 나타납니다. 스토리 보드에서 또는 UIButtonTypeSystem
코드 에서 버튼 유형을 “시스템”으로 설정하면 버튼 의 이미지가 기본 색조 색상으로 렌더링됩니다.
(iOS9, Xcode 7.3에서 테스트)
답변
당신은에 이미지 렌더링 모드를 설정해야합니다 UIImageRenderingModeAlwaysTemplate
(가) 가지고하기 위해 tintColor
있는 UIImage에 영향을 미칩니다. Swift의 솔루션은 다음과 같습니다.
let image = UIImage(named: "image-name")
let button = UIButton()
button.setImage(image?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate), forState: .Normal)
button.tintColor = UIColor.whiteColor()
빠른 4x
button.setImage(image.withRenderingMode(UIImage.RenderingMode.alwaysTemplate), for: .normal)
button.tintColor = UIColor.blue
답변
배경 이미지가있는 사용자 지정 단추가있는 경우 단추의 색조 색상을 설정하고 다음과 같이 이미지를 재정의 할 수 있습니다.
자산에서 색조 색상을 설정하려는 버튼 배경을 선택하십시오.
이미지의 속성 관리자에서 값을 “템플릿 이미지”로 설정합니다.
이제 설정 button.tintColor = UIColor.red
할 때마다 버튼이 빨간색으로 표시됩니다.
답변
Swift에서는 다음과 같이 할 수 있습니다.
var exampleImage = UIImage(named: "ExampleImage.png")?.imageWithRenderingMode(.AlwaysTemplate)
그런 다음 viewDidLoad에서
exampleButtonOutlet.setImage(exampleImage, forState: UIControlState.Normal)
그리고 색상을 수정하려면
exampleButtonOutlet.tintColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1) //your color
Xcode 8 편집
이제 .xcassets에서 이미지의 렌더링 모드를 템플릿 이미지로 렌더링 할 수 있으며 var exampleImage
더 이상 이미지를 구체적으로 선언 할 필요가 없습니다.
답변
정확히 원하는 것이 확실하지 않지만이 카테고리 메소드는 지정된 색상으로 UIImage를 마스킹하여 단일 이미지를 가지고 원하는 색상을 변경할 수 있습니다.
ImageUtils.h
- (UIImage *) maskWithColor:(UIColor *)color;
ImageUtils.m
-(UIImage *) maskWithColor:(UIColor *)color
{
CGImageRef maskImage = self.CGImage;
CGFloat width = self.size.width;
CGFloat height = self.size.height;
CGRect bounds = CGRectMake(0,0,width,height);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bitmapContext = CGBitmapContextCreate(NULL, width, height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
CGContextClipToMask(bitmapContext, bounds, maskImage);
CGContextSetFillColorWithColor(bitmapContext, color.CGColor);
CGContextFillRect(bitmapContext, bounds);
CGImageRef cImage = CGBitmapContextCreateImage(bitmapContext);
UIImage *coloredImage = [UIImage imageWithCGImage:cImage];
CGContextRelease(bitmapContext);
CGColorSpaceRelease(colorSpace);
CGImageRelease(cImage);
return coloredImage;
}
ImageUtils 카테고리를 가져 와서 이와 같은 작업을 수행하십시오.
#import "ImageUtils.h"
...
UIImage *icon = [UIImage imageNamed:ICON_IMAGE];
UIImage *redIcon = [icon maskWithColor:UIColor.redColor];
UIImage *blueIcon = [icon maskWithColor:UIColor.blueColor];