2016-10-03 74 views
0

似乎有对斯威夫特3的XCode 8中的错误,UIBezierPath斯威夫特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) 

它用于生产类似这样

enter image description here

但现在

enter image description here

任何解决方法?

+1

不要陈述“它产生不正确的结果”,请告诉我们它在做什么以及你认为它应该做什么。也许包括一个屏幕截图。 – rmaddy

+0

更新我的问题,@maddy谢谢 –

回答

0

这不太可能是一个错误,并且更可能会改变您的代码不再适用的行为。

这听起来与cornerRadius“不再起作用”非常相似,因为视图的大小现在设置为1000x1000。这可以通过在开始样式之前调用视图的layoutIfNeeded()来解决。首先,我会尝试相同的解决方案。

然而,它看起来像是一个白色的矩形模糊了你贝塞尔路径的一部分。尝试将背景设置为不同的颜色以确认。难道是你在那个视图上设置cornerRadius,它不再按预期工作?

或者,尝试将所有代码移动到viewDidAppear阶段。这可能不是一个永久的解决方案,因为你会看到所有的东西,但它可能有助于理解正在发生的事情。

+0

我实际上尝试在UIView而不是UITextField,它工作正常,给我正确的结果。我还检查了一些Github代码,看起来我的假设是正确的。 –