Я хочу нарисовать некоторые элементы, но оставлю настоящий вырез альфа-прозрачности для круглой области.Чего я хочу добиться:
![image](https://i.stack.imgur.com/hUdA8.png)
Желтый - это пример фона, чтобы показать прокачку.
Ширина выреза на самом деле шире, чем ход дуги, поэтому они нене пересекаются.Мне нужен настоящий вырез, потому что я сохраняю изображение с прозрачностью.
Я подумал, что, возможно, смогу использовать setBlendMode (), но я верю, что это сработает, только если я хочу, чтобы мой вырез был точно такой же ширины, что и дуга.,Но есть суть того, как я пытался это сделать:
![image](https://i.stack.imgur.com/3gMz3.png)
Далее следует книга Swift.Любые советы по достижению этого с благодарностью.
import Foundation
import UIKit
var dimen: CGFloat = 200.0;
var strokeWidth: CGFloat = 20.0;
var cutoutWidth: CGFloat = 30.0;
class DonutView : UIView
{
override func draw(_ rect: CGRect)
{
// cutout
let cutoutColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1)
cutoutColor.setFill()
let cutoutPath = UIBezierPath(ovalIn: CGRect(x: dimen-cutoutWidth, y: dimen/2-cutoutWidth/2, width: cutoutWidth, height: cutoutWidth))
cutoutPath.fill()
// let context = UIGraphicsGetCurrentContext()!
// context.setBlendMode(.sourceOut)
let ringOffset = cutoutWidth/2;
let circleWidth = dimen - ringOffset*2;
// ring
let ringPath = UIBezierPath(ovalIn: CGRect(x: ringOffset, y: ringOffset, width: circleWidth, height: circleWidth))
let ringColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.3)
ringColor.setStroke()
ringPath.lineWidth = strokeWidth
ringPath.stroke()
// arc
let arcRect = CGRect(x: ringOffset, y: ringOffset, width: circleWidth, height: circleWidth)
let arcPath = UIBezierPath()
arcPath.addArc(withCenter: CGPoint(x: arcRect.midX, y: arcRect.midY), radius: arcRect.width / 2, startAngle: -90 * CGFloat.pi/180, endAngle: 37 * CGFloat.pi/180, clockwise: true)
let arcColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.6)
arcColor.setStroke()
arcPath.lineWidth = strokeWidth
arcPath.stroke()
}
}
var view = DonutView(frame: CGRect.init(x: 0, y: 0, width: dimen, height: dimen))
view.backgroundColor = UIColor.yellow
// View these elements
view
(Правка: я должен был заявить об этом изначально: это в конечном итоге создать UIImage для WatchKit)