我想为我的UIView设置一个剥离的背景。 如何在swift中创建一个简单的剥离图像?
像这样:谢谢!
更新答案:
感谢Simon Gladman,我创建了一个制作剥离颜色的功能。但是我没有设法轮换,可能是因为fromRect属性。
// create a striped color
func strippedColor(color1: UIColor, _ color2: UIColor, width: CGFloat = 1) -> UIColor {
let context = CIContext()
let blurFilter = CIFilter(name: "CIStripesGenerator")!
blurFilter.setValue(CIColor(color: color1), forKey: "inputColor0")
blurFilter.setValue(CIColor(color: color2), forKey: "inputColor1")
blurFilter.setValue(width, forKey: "inputWidth")
let ref = context.createCGImage(blurFilter.outputImage!, fromRect: CGRect(x: 0, y: 0, width: 2*width, height: 1))
let ref2 = ref
//let rotateFilter = CIFilter(name: "CIStraightenFilter")!
//rotateFilter.setValue(CIImage(CGImage: ref), forKey: "inputImage")
//rotateFilter.setValue(NSNumber(double: 2), forKey: "inputAngle")
//let ref2 = context.createCGImage(rotateFilter.outputImage!, fromRect: rotateFilter.outputImage!.extent)
let uiimage = UIImage(CGImage: ref2)
let uicolor = UIColor(patternImage: uiimage)
return uicolor
}
答案 0 :(得分:4)
由于使用了CIStraightenFilter,旋转在(更新的)原始帖子中不起作用。这个过滤器可能不适合用作一般的旋转过滤器,因为它可能只是拉直图像:)
我认为CIAffineTransform更适合这种情况。
以下示例生成条带并将其旋转45度,对我来说效果很好。
斯威夫特3:
fileprivate func generateImage(_ width: CGFloat, _ height: CGFloat) -> UIImage {
let context = CIContext()
let stripes = CIFilter(name: "CIStripesGenerator", withInputParameters: [
"inputColor0" : CIColor(red: 0.000, green: 0.000, blue: 0.000),
"inputColor1" : CIColor(red: 0.259, green: 0.259, blue: 0.259),
"inputWidth" : NSNumber(value: 2.0),
"inputSharpness" : NSNumber(value: 0.0)
])!.outputImage!
let rotated = CIFilter(name: "CIAffineTransform", withInputParameters: [
"inputImage" : stripes,
"inputTransform" : NSValue(cgAffineTransform: CGAffineTransform(rotationAngle: 45.0))
])!.outputImage!
return UIImage(cgImage: context.createCGImage(rotated, from: CGRect(x: 0, y: 0, width: width, height: height))!)
}
答案 1 :(得分:1)
如果是我,我会使用CoreImage的CIStripesGenerator
过滤器来创建条纹图案,然后将其链接到CIStraightenFilter
以将其旋转1/4 pi弧度。
使用过滤器创建模式使您可以在运行时控制条带的宽度和颜色。
您可以了解Apple的CoreImage框架here。
干杯!
西蒙
答案 2 :(得分:1)
你绝对可以使用Simon给出的CoreImage答案。它会给出很多动态控制。
如果您只是反复创建相同的模式,那么您可以使用此...
let stripedColor = UIColor(patternImage: stripedPatternImage)
模式图像只包含一个"单位"条纹一遍又一遍地重复创建你想要的图案。