UIColor 图案图像和色调颜色
UIColor Pattern Image and Tint Color
我正在开发一个应用程序,其中的元素需要以不同的颜色进行自定义。到目前为止,我一直在利用 tintColor
和 imageWithRenderingMode
来更改图像颜色。我目前处于需要使用 UIColor(patternImage:)
和 backgroundColor
添加背景平铺图像的情况。有没有办法对背景图块图像应用一种色调,以便我可以在运行时更改背景图像颜色?
您可以将 TintColor 应用于 UIImage 并将该 UIImage 用作平铺的背景色。
将 tintColor 应用于 UIImage:
- (UIImage *) addOverlaytoImage:(UIImage *)mySourceImage
{
UIImage * image = mySourceImage;
UIColor * color = [UIColor yellowColor];
UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height) blendMode:kCGBlendModeNormal alpha:1];
UIBezierPath * path = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, image.size.width, image.size.height)];
[color setFill];
[path fillWithBlendMode:kCGBlendModeMultiply alpha:1]; //look up blending modes for your needs
UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
然后将此图像添加到背景颜色参数中:
yourView.backgroundColor = [UIColor colorWithPatternImage:[self addOverlaytoImage:myImage]];
请参考以下link:Designing for iOS: Blending Modes
使用我发现的 link 这就是我让它工作的原因
// originalImage and originalColor are defined
var image = originalImage.imageWithRenderingMode(.AlwaysTemplate)
UIGraphicsBeginImageContextWithOptions(
originalImage.size,
false,
originalImage.scale)
originalColor.set()
image.drawInRect(CGRectMake(
0,
0,
originalImage.size.width,
originalImage.size.height))
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return UIColor(patternImage: image)
J_P,感谢您的回答!这真的很有帮助。我只想 post Swift 5
的更新版本
extension UIColor {
convenience init(patternImage: UIImage, tintColor: UIColor) {
var image = patternImage.withRenderingMode(.alwaysTemplate)
UIGraphicsBeginImageContextWithOptions(patternImage.size,
false,
patternImage.scale)
tintColor.set()
image.draw(in: CGRect(x: 0, y: 0,
width: patternImage.size.width,
height: patternImage.size.height))
image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
self.init(patternImage: image)
}
}
我正在开发一个应用程序,其中的元素需要以不同的颜色进行自定义。到目前为止,我一直在利用 tintColor
和 imageWithRenderingMode
来更改图像颜色。我目前处于需要使用 UIColor(patternImage:)
和 backgroundColor
添加背景平铺图像的情况。有没有办法对背景图块图像应用一种色调,以便我可以在运行时更改背景图像颜色?
您可以将 TintColor 应用于 UIImage 并将该 UIImage 用作平铺的背景色。
将 tintColor 应用于 UIImage:
- (UIImage *) addOverlaytoImage:(UIImage *)mySourceImage
{
UIImage * image = mySourceImage;
UIColor * color = [UIColor yellowColor];
UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height) blendMode:kCGBlendModeNormal alpha:1];
UIBezierPath * path = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, image.size.width, image.size.height)];
[color setFill];
[path fillWithBlendMode:kCGBlendModeMultiply alpha:1]; //look up blending modes for your needs
UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
然后将此图像添加到背景颜色参数中:
yourView.backgroundColor = [UIColor colorWithPatternImage:[self addOverlaytoImage:myImage]];
请参考以下link:Designing for iOS: Blending Modes
使用我发现的 link
// originalImage and originalColor are defined
var image = originalImage.imageWithRenderingMode(.AlwaysTemplate)
UIGraphicsBeginImageContextWithOptions(
originalImage.size,
false,
originalImage.scale)
originalColor.set()
image.drawInRect(CGRectMake(
0,
0,
originalImage.size.width,
originalImage.size.height))
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return UIColor(patternImage: image)
J_P,感谢您的回答!这真的很有帮助。我只想 post Swift 5
的更新版本extension UIColor {
convenience init(patternImage: UIImage, tintColor: UIColor) {
var image = patternImage.withRenderingMode(.alwaysTemplate)
UIGraphicsBeginImageContextWithOptions(patternImage.size,
false,
patternImage.scale)
tintColor.set()
image.draw(in: CGRect(x: 0, y: 0,
width: patternImage.size.width,
height: patternImage.size.height))
image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
self.init(patternImage: image)
}
}