Я пытаюсь нарисовать «пиксельные» или «векторизованные» линии, которые выглядят следующим образом:
![enter image description here](https://i.stack.imgur.com/9Eb9R.png)
В идеале я пытаюсь чтобы нарисовать путь через что-то вроде CAShapeLayer и сделать пикселизацию пути к этому стилю. Он не должен выглядеть супер великолепно, как реальный актив, но он должен следовать этому общему стилю. Я перепробовал несколько подходов и довольно близко подошел к результату, находящемуся на правильном пути: ![enter image description here](https://i.stack.imgur.com/isLNU.png)
Единственная проблема, которую я имею сейчас, - это удаление размытия, примененного к тому, как я пытался сделать это. Мне нужно, чтобы мой результат был пикселированным, но все еще очень четким, это мой самый последний подход, используемый для получения эффекта выше:
let path = UIBezierPath(roundedRect: bounds, cornerRadius: 20)
let lay = CAShapeLayer()
lay.path = path.cgPath
lay.strokeColor = UIColor.green_bright.cgColor
lay.lineWidth = 5
lay.fillColor = nil
lay.shouldRasterize = true
lay.rasterizationScale = 0.1
layer.addSublayer(lay)
Я также пытался использовать CIF-фильтры, такие как CIPixellate, но не могу понять, как вы можете применить фильтр, подобный этому, для CAShapeLayer или пути любым другим способом.
Есть ли способ очистить этот метод или каким-либо другим способом добиться такого типа эффекта? Все отзывы и идеи приветствуются.
ОБНОВЛЕНИЕ: я пытаюсь использовать фильтры, превращая свой слой в изображение и применяя фильтр CIF, вот как я безуспешно пытаюсь:
extension CAShapeLayer {
func apply(_ filter: String) -> UIImage? {
let context = CIContext(options: nil)
let renderer = UIGraphicsImageRenderer(size: frame.size)
if let currentFilter = CIFilter(name: filter) {
let image = renderer.image { context in
render(in: context.cgContext)
}
let beginImage = CIImage(image: image)
currentFilter.setValue(beginImage, forKey: kCIInputImageKey)
if let output = currentFilter.outputImage {
if let cgimg = context.createCGImage(output, from: output.extent) {
return UIImage(cgImage: cgimg)
}
}
}
return nil
}
}