Skip to content
🥶Provides a vertical drawing of the tree structure which can view information about the tree‘s nodes and supports console debug views & layers and so on
Branch: master
Clone or download
Latest commit 47228a8 Apr 30, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Demo update to 0.2.1 Apr 30, 2019
class update to 0.2.1 Apr 30, 2019
.gitignore Initial commit Jan 22, 2019
.travis.yml update travis ci Apr 30, 2019
LICENSE Initial commit Jan 22, 2019
Package.swift update package Apr 23, 2019
README.md add travis ci Apr 30, 2019
README_CN.md add travis ci Apr 30, 2019
VerticalTree.podspec update to 0.2.1 Apr 30, 2019
fast_pod_install add tree node's pretty log Apr 15, 2019

README.md

Version CI Status License Platform CI Status

Provides a vertical drawing of the tree structure which can view information about the tree‘s nodes and supports console debug views & layers and so on

Install

required iOS >= 9.0 Swift5.0 with Cocoapods

pod 'VerticalTree'

only install core functions

pod 'VerticalTree/Core'

install prettyPrint extension for view、layer、viewController

pod 'VerticalTree/PrettyExtension'

file structures

─┬─ "VerticalTree"
 ├─┬─ "Core": basic functions
 │ ├─── VerticalTreeProtocol
 │ ├─── VerticalTreeProtocolExtension
 │ └─── VerticalTreeNodeWrapper
 ├─┬─ "UI": draw a graph of VerticalTree which is foldable
 │ ├─── VerticalTreeCell
 │ ├─── VerticalTreeIndexView
 │ └─── VerticalTreeListController
 └─┬─ "PrettyExtension": pretty print in xcode console
   └─── VerticalTreePrettyPrint

core protocols

/// show the node info
public protocol Infomation {
    var nodeTitle: String { get }
    var nodeDescription: String? { get }
}

/// base treeNode structure and position
public protocol IndexPathNode {
    associatedtype T: IndexPathNode
    var parent: T? { get }
    var childs: [T] { get }
    var indexPath: IndexPath { get }
}

/// Node protocol
public protocol VerticalTreeNode: IndexPathNode where Self.T == Self {
    /// indexViewLegnth
    var length: TreeNodeLength { get }
    /// info description
    var info: Infomation { get }
    var isFold: Bool { set get }
}

Example for UIView

UIView is a tree structure

  • VerticalTree in tableview
  • VerticalTree in console log

Using

1. draw the VerticalTree in tableview

for example a UITableViewCell structure:

vertical_tree

// in ViewController
let treeVC = VerticalTreeListController(source: NodeWrapper(obj: view))
// then show the treeVC

Config Node's info

in NodeWrapper's method

/// config current node’s property value and recurrence apply the same rule in childNodes if you want
///
/// - Parameters:
///   - inChild: recurrence config in child or just config current
///   - config: rules
/// - Returns: self
@discardableResult
public func changeProperties(inChild: Bool = true, config: (NodeWrapper<Obj>) -> Void) -> Self {}

follow picture: modify UIViewController's Wrapper

// default to change all subnode in the same rules unless inChild set false
let wrapper = NodeWrapper(obj: keyWindow.rootController).changeProperties {
    $0.isFold = false	// all node set unfold in default 
    $0.nodeDescription = "more infomation that you see now"
}

2. Text VerticalTree - in Console log

tree

UIView as the example to follow the IndexPathNode protocol
see more others extension like CALayer,UIViewController in the demo

extension UIView: IndexPathNode {
    public var parent: UIView? {
        return superview
    }
    public var childs: [UIView] {
        return subviews
    }
}

get a wrapper of the view as a root node

// in ViewController
let rootNode = NodeWrapper(obj: view)
// print node structure in text
print(rootNode.subTreePrettyText())

Using UIView's Extension as an easier way, check here VerticalTree/PrettyText

extension IndexPathNode where Self: NSObject, Self == Self.T {
    /// print
    public func treePrettyPrint(inDebug: Bool = false) {...}
    /// baseTree‘s structure
    public func treePrettyText(inDebug: Bool = false) -> String {...}
    /// get ofTop‘s structure & highlight position of self
    public func treePrettyText(ofTop: Self, inDebug: Bool = false) { ... }
    // get the baseTree of rootNode
    public var getTreeRoot: Self { ... }
}
  • print current view as root node

view.treePrettyPrint()

  • print view's Window structure

view.getTreeRoot.treePrettyPrint()

  • show more infomation

view.treePrettyPrint(inDebug: true)

image

BTW

  • LLDB debug view & layer & controller's hierarchy
    • view & layer
      • method-1: po yourObj.value(forKey: "recursiveDescription")!
      • method-2: expression -l objc -O -- [yourObj recursiveDescription]
    • controller
      • method-1: po yourController.value(forKey: "_printHierarchy")!
      • method-2: expression -l objc -O -- [yourController _printHierarchy]

image

Author

XcodeYang, xcodeyang@gmail.com

License

VerticalTree is available under the MIT license. See the LICENSE file for more info.

You can’t perform that action at this time.