Проблема заключается в том, что путь безье не нарисован внутри его границ. Он тянется вокруг его границ. Таким образом, половина ширины хода внутри и половина снаружи. Вы должны настроить границы, чтобы справиться с этим.
Измените кадр, который вы передаете в путь безье от self.bounds
до self.bounds.insetBy(dx: 5, dy: 5)
, где 5
- половина вашей ширины линии.
И строки:
gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
приводят к тому, что градиент идет слева направо.
Здесь полностью работает код из вашего:
class View: UIView {
override func layoutSubviews() {
super.layoutSubviews()
let path = UIBezierPath(roundedRect: self.bounds.insetBy(dx: 5, dy: 5), byRoundingCorners: [.topLeft, .bottomLeft, .topRight, .bottomRight], cornerRadii: CGSize(width: frame.size.height / 2, height: frame.size.height / 2))
let gradient = CAGradientLayer()
gradient.frame = CGRect(origin: CGPoint.zero, size: frame.size)
gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
gradient.colors = [UIColor.green.cgColor, UIColor.red.cgColor]
let shape = CAShapeLayer()
shape.lineWidth = 10
shape.path = path.cgPath
shape.strokeColor = UIColor.black.cgColor
shape.fillColor = UIColor.clear.cgColor
gradient.mask = shape
layer.insertSublayer(gradient, at: 0)
}
}
Когда в файлах декларации появляются ошибки, это, как правило, указывает на то, что в файле декларации используется синтаксис, недоступный в вашей версии TypeScript.
В этом случае, давайте посмотрим на строки, сообщенные как ошибки.
64: then<U = T, V = never>(onFulfill?: ...
200: thenReject<U = T>(reason?: any): Promise<U>;
Ошибки, о которых здесь сообщается, указывают на знаки равенства в разделе аргументов типа. Это указывает на то, что аргументы типа по умолчанию не поддерживаются. Это на самом деле не имеет смысла, поскольку в TS2.3 была добавлена поддержка аргументов типа по умолчанию . Я думаю, что у вас не было 2.3 установленного для этих ошибок, и версии были переключены ...
С учетом этого другие ошибки, вероятно, связаны с несовместимостью старых (< 2.1, если я правильно помню) файлов typings
и новых файлов @types
. С типами, установленными в node_modules/@types/q
, вам не нужно включать пользовательскую папку typings
, поэтому вы должны иметь возможность удалить typings/modules/q
(фактически, всю папку typings
), чтобы устранить другую ошибку.
Если это не решит вашу проблему, проект клонирования позволит намного легче понять, что не так.