     required init?(coder aDecoder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
-    
+    //MARK: -Action
     @objc private func nodeBtnClick(button:RLNodeBtn) {
-        nodeBtnAction(nodeModel: button.nodeModel!)
+        if let nodeM = button.nodeModel {
+            nodeBtnAction(nodeModel: nodeM)
+        }
     }
     
-    func addNodeBtnToScrollView(button:RLNodeBtn) {
-        self.addSubview(button)
-        nodesBtnArray.addObject(button)
-    }
-    
+    //MARK: -UIScrollViewDelegate
     func scrollViewDidScroll(scrollView: UIScrollView) {
         let container = CGRectMake(scrollView.contentOffset.x + (self.viewBarrierOuter.mj_w / 8),
                                    scrollView.contentOffset.y + (self.viewBarrierOuter.mj_h / 8),

            
            for nodeModel in nodeModels! {
                let nodeBtn = RLNodeBtn(type:.Custom)
                
                nodeBtn.nodeModel = nodeModel as? RLNode
                
                nodeBtn.frame = CGRectMake(xValue, yValue, 60, 60);
                nodeBtn.setTitle((nodeModel as? RLNode)!.title, forState:UIControlState.Normal)
                
                //                [self addNodeBtnToScrollView:nodeBtn];
                self.addSubview(nodeBtn)
                nodesBtnArray.addObject(nodeBtn)
                


class RLBubblesView: UIScrollView, UIScrollViewDelegate {

    // MARk: -setter方法
    var nodeModels:NSSet? {
        didSet{//带属性监视器,表示nodeModels被设置时调用(即使是设置相同的值也会调用)
            let gutter:CGFloat = 20
