使用UIImagePickerController时照片库中照片的圆形裁剪

时间:2018-07-28 21:15:31

标签: swift swift4 uiimagepickercontroller photolibrary

我正尝试将方形裁剪工具更改为从Swift 4照片库中选择的图像的圆形裁剪工具。在这里,我尝试了很多可用的旧代码,但没有运气。有人能帮帮我吗。

此代码中主要存在2个问题。

  1. 它不会隐藏已经存在的方形裁剪区域。
  2. 它在旧叠加层下显示选择和取消按钮,因此无法点击它。

任何帮助将不胜感激。

我的代码:

private func hideDefaultEditOverlay(view: UIView)
{
    for subview in view.subviews
    {
        if let cropOverlay = NSClassFromString("PLCropOverlayCropView")
        {
            if subview.isKind(of: cropOverlay) {
                subview.isHidden = true
                break
            }
            else {
                hideDefaultEditOverlay(view: subview)
            }
        }
    }
}

private func addCircleOverlayToImageViewer(viewController: UIViewController) {
    let circleColor = UIColor.clear
    let maskColor = UIColor.black.withAlphaComponent(0.8)
    let screenHeight = UIScreen.main.bounds.size.height
    let screenWidth = UIScreen.main.bounds.size.width

    hideDefaultEditOverlay(view: viewController.view)

    let circleLayer = CAShapeLayer()
    let circlePath = UIBezierPath(ovalIn: CGRect(x: 0, y: screenHeight - screenWidth, width: screenWidth, height: screenWidth))
    circlePath.usesEvenOddFillRule = true
    circleLayer.path = circlePath.cgPath
    circleLayer.fillColor = circleColor.cgColor

    let maskPath = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight), cornerRadius: 0)
    maskPath.append(circlePath)
    maskPath.usesEvenOddFillRule = true

    let maskLayer = CAShapeLayer()
    maskLayer.path = maskPath.cgPath
    maskLayer.fillRule = kCAFillRuleEvenOdd
    maskLayer.fillColor = maskColor.cgColor
    viewController.view.layer.addSublayer(maskLayer)

    // Move and Scale label
    let label = UILabel(frame: CGRect(x: 0, y: 20, width: view.frame.width, height: 50))
    label.text = "Move and Scale"
    label.textAlignment = .center
    label.textColor = UIColor.white
    viewController.view.addSubview(label)
}

0 个答案:

没有答案