         set(newLineWidth) {
             self._lineWidth = newLineWidth
         }
-            
-    }
-}
+    }
+}
+
 
 // MARK: Class Declaration
 public class LineLayer: CALayer {
+    // Required Init
+    required public init?(coder aDecoder: NSCoder) {
+        fatalError("LineLayer does not support NSCoding")
+    }
+    
+    // Init
+    public init(configuration: LineLayerConfiguration) {
+        super.init()
+        // Intentionally using self.__orientation here, so the
+        // length and the lineWidth are not unnecessarily swapped.
+        // This is also the reason for setting the orientation first.
+        self.__orientation = configuration.orientation
+        self.length = configuration.length
+        self.lineWidth = configuration.lineWidth
+        self.parallelPosition = configuration.parallelPosition
+        self.orthogonalPosition = configuration.orthogonalPosition
+    }
+    
+    // Private Variables
     fileprivate var __orientation: LineLayer.Orientation = .horizontal
 }
 
 
-// MARK: Overrides
+// MARK: Unavailability Overrides
 public extension LineLayer {
-    public override var frame: CGRect {
-        get {
-            return self._frame
-        }
-        set(newFrame) {
-            self._frame = newFrame
-        }
-    }
-}
-
-
-// MARK: // Private
+    @available(*, unavailable)
+    public final override var frame: CGRect {
+        get { return .null }
+        set {}
+    }
+    
+    @available(*, unavailable)
+    public final override var bounds: CGRect {
+        get { return .null }
+        set {}
+    }
+    
+    @available(*, unavailable)
+    public convenience init(frame: CGRect) {
+        fatalError()
+    }
+    
+    @available(*, unavailable)
+    public convenience init(size: CGSize) {
+        fatalError()
+    }
+}
+
+
+// MARK: - // Private
 // MARK: Computed Properties
 private extension LineLayer {
     var _orientation: LineLayer.Orientation {

        }
    }
    
    var _length: CGFloat {
        get {
            switch self.orientation {
            case .horizontal:
                return self.frame.width
            case .vertical:
                return self.frame.height
            }
        }
        set(newLength) {
            switch self.orientation {
            case .horizontal:
                self.frame.size.width = newLength
            case .vertical:
                self.frame.size.height = newLength
            }
        }
    }

import UIKit


// MARK: - // Public
// MARK: - LineLayerConfiguration
// MARK: Struct Declaration
public struct LineLayerConfiguration {
    let parallelPosition: CGFloat = 0
    let orthogonalPosition: CGFloat = 0
    let orientation: LineLayer.Orientation = .horizontal
    let lineWidth: CGFloat = 1
    let length: CGFloat = 0
}


// MARK: - LineLayer
// MARK: Interface
public extension LineLayer {
    // Enum Orientation
    public enum Orientation {
        case horizontal
        case vertical
    }
    
    // ReadWrite
    public var parallelPosition: CGFloat {
        get {
            return self._parallelPosition
        }
        set(newParallelPosition) {
            self._parallelPosition = newParallelPosition
        }
    }
    
    public var orthogonalPosition: CGFloat {
        get {
            return self._orthogonalPosition
        }
        set(newOrthogonalPosition) {
            self._orthogonalPosition = newOrthogonalPosition
        }
    }
    
    public var orientation: LineLayer.Orientation {
        get {
            return self._orientation
