MacOS開發(fā)之不規(guī)則布局

需要利用三方庫:YMTreeMap

效果圖如下:

Screenshot 2023-06-27 at 09.59.20.png

代碼如下:

//MARK: 不規(guī)則試圖布局
    func reloadDetailView(list:[FileInformation]) -> Void {
        
        let new_list  = list.sorted(by: {$0.size > $1.size})
        
        if detailbgView.subviews.count > 0 {
            for obj in detailbgView.subviews {
                obj.removeFromSuperview()
            }
        }
        
        var sizeArr = [Double]()
        var arrnum = 0
        if new_list.count > 0 {
            for model in new_list {
                if model.size != 0 && arrnum < 10 {
                    arrnum += 1
                    sizeArr.append(Double(model.size))
                }
            }
        }
        
        if sizeArr.count == 0 {
            //空目錄
            detailbgView.isHidden = true
            NotFileBgView.isHidden = false
            return
        }
        
        detailbgView.isHidden = false
        NotFileBgView.isHidden = true
        
        //12個數(shù)做log運算
        sizeArr = changeNumToLog(list: sizeArr)
        
        let treeMapRect = NSRect.init(x: 0, y: 0, width: detailbgView.frame.width , height: detailbgView.frame.height)
        let values = sizeArr
        let tm = YMTreeMap.init(withValues: values)
        let treeMapRects = tm.tessellate(inRect: treeMapRect)
        
        //隨機獲取item背景漸變色
        let aGradient1 = NSGradient(colors: [NSColor(hex: "A18CD1"),NSColor(hex: "FBC2EB")])
        let aGradient2 = NSGradient(colors: [NSColor(hex: "16D9E3"),NSColor(hex: "30C7EC"),NSColor(hex: "46AEF7")])
        let aGradient3 = NSGradient(colors: [NSColor(hex: "FF9A9E"),NSColor(hex: "FAD0C4"),NSColor(hex: "FAD0C4")])
        let aGradient4 = NSGradient(colors: [NSColor(hex: "C471F5"),NSColor(hex: "FA71CD")])
        let aGradient5 = NSGradient(colors: [NSColor(hex: "FCCB90"),NSColor(hex: "D57EEB")])
        let aGradient6 = NSGradient(colors: [NSColor(hex: "37ECBA"),NSColor(hex: "72AFD3")])
        let aGradient7 = NSGradient(colors: [NSColor(hex: "F6D365"),NSColor(hex: "FDA085")])
        let aGradient8 = NSGradient(colors: [NSColor(hex: "A1C4FD"),NSColor(hex: "C2E9FB")])
        let aGradient9 = NSGradient(colors: [NSColor(hex: "E0C3FC"),NSColor(hex: "8EC5FC")])
        let aGradient10 = NSGradient(colors: [NSColor(hex: "5EE7DF"),NSColor(hex: "B490CA")])
        let aGradient11 = NSGradient(colors: [NSColor(hex: "9890E3"),NSColor(hex: "B1F4CF")])
        let aGradient12 = NSGradient(colors: [NSColor(hex: "37ECBA"),NSColor(hex: "72AFD3")])
        let aGradient13 = NSGradient(colors: [NSColor(hex: "EBBBA7"),NSColor(hex: "CFC7F8")])
        let colors = [aGradient1,aGradient2,aGradient3,aGradient4,aGradient5,aGradient6,aGradient7,aGradient8,aGradient9,aGradient10,aGradient11,aGradient12,aGradient13]
    
        var nums = 0
        for rectVal in treeMapRects {
            let rectVals = NSValue(rect: rectVal)
            let spaceViewRect1 = CGRectMake(rectVals.rectValue.origin.x+2, rectVals.rectValue.origin.y+2, rectVals.rectValue.size.width, rectVals.rectValue.size.height )
            let view = PMMDiskAnaysisSpaceView.init(frame: spaceViewRect1)
            let num = arc4random() % 13
            let configKey = colors[Int(num)]
            view.tag = nums
            view.gradient = configKey
            view.model = new_list[nums]
            view.delegate = self
            view.moveDelegate = self
            detailbgView.addSubview(view)
            nums += 1
        }
    }
    //MARK: log運算
    func changeNumToLog(list:[Double]) -> [Double] {
        
        var sizeArr = [Double]()
        for obj in list {
            let num = log(obj) * log(obj) * log(obj)  * log(obj)  * log(obj)  * log(obj)  * log(obj)  * log(obj)  * log(obj)  * log(obj)  * log(obj)  * log(obj)
            if sizeArr.count > 0 {
                guard let firstNum = sizeArr.first else { return [] }
                let ratio = Double(num)/(firstNum * 1.0)
                if ratio > 0.02 {
                    sizeArr.append(Double(num))
                }
            }else{
                sizeArr.append(Double(num))
            }
        }
        return sizeArr
    }
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末套像,一起剝皮案震驚了整個濱河市计济,隨后出現(xiàn)的幾起案子雁社,更是在濱河造成了極大的恐慌,老刑警劉巖魁淳,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡虱肄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門交煞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咏窿,“玉大人,你說我怎么就攤上這事素征〖叮” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵御毅,是天一觀的道長根欧。 經(jīng)常有香客問我,道長端蛆,這世上最難降的妖魔是什么凤粗? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮今豆,結(jié)果婚禮上嫌拣,老公的妹妹穿的比我還像新娘。我一直安慰自己呆躲,他們只是感情好异逐,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歼秽,像睡著了一般应役。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上燥筷,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天箩祥,我揣著相機與錄音,去河邊找鬼肆氓。 笑死袍祖,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的谢揪。 我是一名探鬼主播蕉陋,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼捐凭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凳鬓?” 一聲冷哼從身側(cè)響起茁肠,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缩举,沒想到半個月后垦梆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡仅孩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年托猩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辽慕。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡京腥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溅蛉,到底是詐尸還是另有隱情公浪,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布温艇,位于F島的核電站因悲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏勺爱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一讯检、第九天 我趴在偏房一處隱蔽的房頂上張望琐鲁。 院中可真熱鬧,春花似錦人灼、人聲如沸围段。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奈泪。三九已至,卻和暖如春灸芳,著一層夾襖步出監(jiān)牢的瞬間涝桅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工烙样, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冯遂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓谒获,卻偏偏與公主長得像蛤肌,于是被迫代替她去往敵國和親壁却。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容