     public var isAffineTransform: Bool = true
     public var zanPosition: CGPoint?
     public var zanLineColor = UIColor.black
-    public var zanLineWidth: CGFloat = 1.0
+    public var zanLineWidth: CGFloat = 0.3
     
     fileprivate weak var transitionContext: UIViewControllerContextTransitioning!
     fileprivate var containerView: UIView!

        let otherSideOffsetFrame: CGRect
        let slice: CGRect
        let remainder: CGRect
        let zanLine: UIView
        let zanEndPoint: CGSize
        
        var oneSideMaskLayer: CAShapeLayer? = nil
        var otherSideMaskLayer: CAShapeLayer? = nil
        
        if zanAngle.isHorizontal() {
            let divided = containerFrame.divided(atDistance: zanPoint.y, from: .minYEdge)
            slice = divided.slice
            remainder = divided.remainder
            oneSideOffsetFrame = slice.offsetBy(dx: 0.0, dy: -slice.height)
            otherSideOffsetFrame = remainder.offsetBy(dx: 0.0, dy: remainder.height)
            
            zanLine = UIView(frame: CGRect(x: 0.0, y: zanPoint.y, width: 0.0, height: zanLineWidth))
            zanEndPoint = CGSize(width: containerFrame.maxX, height: zanLine.frame.height)
            
        } else if zanAngle.isVertical() {
            let divided = containerFrame.divided(atDistance: zanPoint.x, from: .minXEdge)
            slice = divided.slice
            remainder = divided.remainder
            oneSideOffsetFrame = slice.offsetBy(dx: -slice.width, dy: 0.0)
            otherSideOffsetFrame = remainder.offsetBy(dx: remainder.width, dy: 0.0)
            
            zanLine = UIView(frame: CGRect(x: zanPoint.x, y: 0.0, width: zanLineWidth, height: 0.0))
            zanEndPoint = CGSize(width: zanLine.frame.width, height: containerFrame.maxY)
        } else {
            slice = containerFrame
            remainder = containerFrame
            oneSideOffsetFrame = slice.offsetBy(dx: slice.width, dy: slice.height)
            otherSideOffsetFrame = remainder.offsetBy(dx: -remainder.width, dy: -remainder.height)
            
            zanLine = UIView(frame: CGRect(x: containerFrame.maxX, y: 0.0, width: 1.0, height: 1.0))
            zanEndPoint = .zero
            
            let maskLayers = maskLayer(zanPosition: zanPoint)
            oneSideMaskLayer = maskLayers.oneSide
            otherSideMaskLayer = maskLayers.otherSide
        }
        
        let oneSideView = zanTargetView.resizableSnapshotView(from: slice, afterScreenUpdates: false, withCapInsets: .zero)!

        otherSidePath.addLine(to: CGPoint(x: containerFrame.minX, y: containerFrame.minY))
        otherSidePath.close()
        
        return otherSidePath
    }
    
}

extension SamuraiTransition: CAAnimationDelegate {
    
    public func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
        if let layer = anim.value(forKey: "LineLayer") as? CAShapeLayer {
            layer.removeFromSuperlayer()
        }
    }
    
}

