Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将角半径应用于CAShapeLayer会导致视觉瑕疵_Ios_Swift_Uiview - Fatal编程技术网

Ios 将角半径应用于CAShapeLayer会导致视觉瑕疵

Ios 将角半径应用于CAShapeLayer会导致视觉瑕疵,ios,swift,uiview,Ios,Swift,Uiview,我创建了一个CAShapeLayer并将其添加为子层,而不是直接在view.layer上工作,以允许使用虚线或虚线边框(使用lineDashPattern)。问题是,在某些边界宽度和角半径值处,随机垂直线开始出现。放大(如果必须)右侧的图片 注:这些线在我的物理测试设备上是垂直的,但在模拟器上是水平的 我创建了一个小测试项目来演示这一点。在storyboard中,我设置了红方块和滑块,所有的边框工作都在这个代码片段的底部完成(为了清晰起见,我在类中包含了所有内容): 有人处理过这个问题吗?UI

我创建了一个CAShapeLayer并将其添加为子层,而不是直接在view.layer上工作,以允许使用虚线或虚线边框(使用lineDashPattern)。问题是,在某些边界宽度和角半径值处,随机垂直线开始出现。放大(如果必须)右侧的图片

注:这些线在我的物理测试设备上是垂直的,但在模拟器上是水平的

我创建了一个小测试项目来演示这一点。在storyboard中,我设置了红方块和滑块,所有的边框工作都在这个代码片段的底部完成(为了清晰起见,我在类中包含了所有内容):


有人处理过这个问题吗?UIView或CAShapeLayer上是否有我可以设置以消除它的设置?

尝试以下答案:,如果没有帮助,请尝试更改“干净”分数中的角半径,如0.05、0.1或1,然后查看是否出现瑕疵。在链接中找到的答案均无效。我已尝试应用“testView.layer.masksToBounds=true”、“testView.clipsToBounds=true”和“testView.layoutIfNeeded()”。我还尝试过将cornerRadius值四舍五入到最接近的整数(与最接近的第一个小数点类似),但这并没有什么区别。垂直线瑕疵继续出现。请尝试以下答案:,如果没有帮助,请尝试更改“干净”分数中的角半径,如0.05、0.1或1,然后查看瑕疵是否出现。在链接中找到的答案均无效。我已尝试应用“testView.layer.masksToBounds=true”、“testView.clipsToBounds=true”和“testView.layoutIfNeeded()”。我还尝试过将cornerRadius值四舍五入到最接近的整数(与最接近的第一个小数点类似),但这并没有什么区别。垂直线瑕疵继续出现。
@IBOutlet weak var testView: UIView!

@IBOutlet weak var slider: UISlider!

var border : CAShapeLayer?

override func viewDidLoad() {
    super.viewDidLoad()

    updateViewCornerRadius(newCornerRadius: 0.0)

    slider.addTarget(self, action: #selector(ViewController.onSliderChange), for: UIControlEvents.valueChanged)
}

func onSliderChange() {
    updateViewCornerRadius(newCornerRadius: slider.value)
}

func updateViewCornerRadius(newCornerRadius : Float) {

    if border != nil {
        border?.removeFromSuperlayer()
    }

    let cornerRadius = CGFloat(newCornerRadius)

    testView.layer.cornerRadius = cornerRadius

    border = CAShapeLayer()
    border!.masksToBounds = true
    border!.cornerRadius = cornerRadius
    border!.strokeColor = UIColor.black.cgColor
    border!.lineDashPattern = [1, 0]
    border!.frame = testView.bounds
    border!.fillColor = UIColor.clear.cgColor
    border!.path = UIBezierPath(roundedRect: testView.bounds, byRoundingCorners: UIRectCorner.allCorners, cornerRadii: CGSize(width: cornerRadius, height: cornerRadius)).cgPath
    border!.lineWidth = 12
    testView.layer.addSublayer(border!)
}