         let otherSideOffsetFrame: CGRect
         let slice: CGRect
         let remainder: CGRect
-        let zanLine: UIView
-        let zanEndPoint: CGSize
         
         var oneSideMaskLayer: CAShapeLayer? = nil
         var otherSideMaskLayer: CAShapeLayer? = nil
+        let lineLayer: CAShapeLayer
         
         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)
+            lineLayer = zanLineLayer(from: CGPoint(x: containerFrame.minX, y: zanPoint.y), end: CGPoint(x: containerFrame.maxX, y: zanPoint.y))
             
         } 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)
+            lineLayer = zanLineLayer(from: CGPoint(x: zanPoint.x, y: containerFrame.minY), end: CGPoint(x: zanPoint.x, y: 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 bottomX = diagnoallyBottomX(zanPosition: zanPoint)
+            lineLayer = zanLineLayer(from: CGPoint(x: containerFrame.maxX, y: containerFrame.minY), end: CGPoint(x: bottomX, y: containerFrame.maxY))
+            
         }
         
         let oneSideView = zanTargetView.resizableSnapshotView(from: slice, afterScreenUpdates: false, withCapInsets: .zero)!

        otherSidePath.addLine(to: CGPoint(x: containerFrame.minX, y: containerFrame.minY))
        otherSidePath.close()
        
        let otherSideLayer = CAShapeLayer()
        otherSideLayer.path = otherSidePath.cgPath
        
        return (oneSideLayer, otherSideLayer)
    }
    
}

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