#ios #swift #uibezierpath
#iOS #swift #uibezierpath
Вопрос:
Похоже, что в Swift 3 и XCode 8 есть ошибка, UIBezierPath
let myBounds = textField.bounds
let maskPath = UIBezierPath(roundedRect: myBounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let maskLayer = CAShapeLayer()
maskLayer.frame = myBounds
maskLayer.path = maskPath.cgPath
self.textField.layer.mask = maskLayer
let frameLayer = CAShapeLayer()
frameLayer.frame = myBounds
frameLayer.path = maskPath.cgPath
frameLayer.strokeColor = UIColor(hexString: "#59a646").cgColor
frameLayer.fillColor = UIColor.white.cgColor
frameLayer.lineWidth = 1*2;
self.textField.layer.addSublayer(frameLayer)
Раньше он создавал нечто подобное
Но теперь
Какие-либо обходные пути?
Комментарии:
1. Вместо того, чтобы указывать «он выдает неправильные результаты», расскажите нам, что он на самом деле делает и что, по вашему мнению, он должен делать. Возможно, включите снимок экрана.
2. Обновил мой вопрос, @maddy спасибо
Ответ №1:
Вряд ли это ошибка, и, скорее всего, это измененное поведение, с которым ваш код больше не работает.
Это звучит очень похоже на то, как cornerRadius «больше не работает», потому что размер представления теперь составляет 1000×1000 на момент его установки. Это можно исправить, вызвав представление layoutIfNeeded()
перед началом стилизации. Итак, сначала я бы попробовал то же решение.
Тем не менее, похоже, что часть вашего пути Безье скрывает белый прямоугольник. Попробуйте установить фон другого цвета для подтверждения. Может быть, вы устанавливаете cornerRadius
это представление, и оно больше не работает должным образом?
В качестве альтернативы попробуйте переместить весь код на viewDidAppear
сцену. Вероятно, это не постоянное решение, поскольку вы увидите, что все нарисовано, но это может помочь понять, что происходит.
Комментарии:
1. Я действительно попробовал использовать UIView вместо UITextField, и он работает нормально, давая мне правильные результаты. И я также проверил некоторые коды Github и, похоже, мое предположение верно.