代码之家  ›  专栏  ›  技术社区  ›  ThiagoAM

如何在雨燕中为府绸及其箭头添加边框颜色?

  •  4
  • ThiagoAM  · 技术社区  · 7 年前

    我的应用程序中有以下popover:

    enter image description here

    但我希望它看起来像这个编辑过的图像(注意,即使箭头也有边框):

    enter image description here

    现在可能吗?我已经试过了 UIViewController :

    self.view.layer.borderColor = UIColor.white.cgColor
    self.view.layer.borderWidth = 2
    

    但这对箭不起作用。这件事有转机吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Li Sim    7 年前

    您是否尝试过将笔划设置为UIBezierPath?在关闭UIBezierPath之前,可以使用以下代码行执行此操作:

    Color.purple.setStroke()
    bezierPath.stroke()
    

    以下是我在操场上取得的成绩:

    enter image description here

    然而,我意识到我不能改变它的宽度,所以我创建了另一层,只是为了边界。

    let borderLayer = CAShapeLayer()
    borderLayer.frame = self.bounds
    borderLayer.path = bezierPath.cgPath
    borderLayer.lineWidth = 6.0
    borderLayer.strokeColor = UIColor.black.cgColor
    borderLayer.fillColor = UIColor.clear.cgColor
    self.layer.insertSublayer(borderLayer, at: 0)
    

    运动场成绩:

    enter image description here

    我认为这应该会有所帮助,但如果没有关于如何实现形状的代码,我真的无法给出太多建议。您使用的是UIBezierPath还是CGContext?

        2
  •  1
  •   Alexander Langer    4 年前

    我花了一段时间,但终于解决了这个问题。它从一个常见的UiPopoverPresentationController开始。还没什么特别的。

    这个控制器将自己隐藏在 viewWillAppear 和 viewDidAppear 所以我选择了popover成型时自己面具的路径,并用它制作了一个带有笔划的子层。

        override func viewWillLayoutSubviews() {
            guard let shapeLayer = view.superview?.superview?.mask?.layer as? CAShapeLayer else { return }
            let borderLayer = CAShapeLayer()
            borderLayer.path = shapeLayer.path
            borderLayer.lineWidth = 4
            borderLayer.strokeColor = borderColor.cgColor
            borderLayer.fillColor = UIColor.clear.cgColor
            borderLayer.frame = shapeLayer.bounds
            view.superview?.superview?.layer.addSublayer(borderLayer)
        }
    

    结果是这样的。

    Result looks like this

        3
  •  0
  •   Prasad Shinde    6 年前

    你可以用 ElegantPopover 要做到这一点。

    var design = PSDesign()
    design.borders = [PSBorder(filling: .pureColor(yourBorderColor), width: yourBorderWidth)]
    
    // Corner radius of popover
    design.cornerRadius = 15
    
    // Customise the arrow as you like
    let arrow = PSArrow(height: 30, base: 60, baseCornerRadius: 5, direction: .up)
    
    let popoverController = ElegantPopoverController(contentView: yourContentView,
                                                design: design,
                                                arrow: arrow
                                                barButtonItem: barBtnItem)
    
    present(popoverController, animated: true)
    
    推荐文章