行轉(zhuǎn)列

針對(duì)類似 UICollectionView當(dāng)橫向滾動(dòng)時(shí)逸吵,顯示順序保持豎向滾動(dòng)時(shí)的排序轉(zhuǎn)換方法

OC


- (void)viewDidLoad {
    [super viewDidLoad];
   // 示例數(shù)組
    NSMutableArray *array = [@[] mutableCopy];
    
    for (int i = 0; i < 23; i++) {
        [array addObject:@(i)];
    }
    
    NSArray *list = [self convertSortRowToColumnWithArray:array columns:5 rows:3];
    for (NSNumber *num in list) {
        NSLog(@">>%ld", [num integerValue]);
    }
}

- (NSArray *)convertSortRowToColumnWithArray:(NSArray *)list columns:(NSInteger)column rows:(NSInteger)row {
    if (column < 2 || row < 2 || list.count < 3) {
        return list;
    }
    
    // 分頁(yè)
    NSInteger count = list.count;
    NSInteger pages = count / (column * row);
    NSInteger remainder = count % (column * row);
    if (remainder) {
        pages += 1;
    }
    
    NSMutableArray *result = [@[] mutableCopy];
    NSInteger length = column * row;
    for (int i = 0; i < pages; i++) {
        
        NSInteger location = i * length;
        if (i == pages - 1) {
            length = count - location;
        }
        NSArray *segment = [list subarrayWithRange:NSMakeRange(location, length)];
        // 重排序
        segment = [self sortByColumnWithArray:segment columns:column rows:row];
        [result addObjectsFromArray:segment];
    }
    
    return [result copy];
}

- (NSArray *)sortByColumnWithArray:(NSArray *)list columns:(NSInteger)column rows:(NSInteger)row {
    NSInteger count = list.count;
    NSMutableArray *array = [@[] mutableCopy];
    
    // 先計(jì)算能排多少列
    NSInteger realColumn = count / row;
    NSInteger remainder = count % row;
    if (remainder) {
        realColumn += 1;
    }
    
    for (int i = 0; i < realColumn; i++) {
        NSMutableArray *columnArray = [NSMutableArray arrayWithCapacity:row];
        for (int j = 0; j < row; j++) {
            NSInteger index = i + j * realColumn;
            if (index < count) {
                [columnArray addObject:list[index]];
            }
        }
        [array addObjectsFromArray:columnArray];
    }
    return [array copy];
}

Swift

// 當(dāng) UICollectionView 橫向分頁(yè)時(shí),item默認(rèn)排序是豎向排序,此方法轉(zhuǎn)化為橫向排序
    static func convertSortRowToColumn(list: [Any], columns column:Int, rows row:Int) -> [Any] {
        if (column < 2 || row < 2 || list.count < 3) { return list }
        
        // 分頁(yè)
        let count = list.count;
        var pages = count / (column * row)
        let remainder = count % (column * row)
        if (remainder > 0) { pages += 1 }
        
        var result: [Any] = []
        var length = column * row
        for i in 0..<pages {
            let location = i * length
            if (i == pages - 1) { length = count - location }
            var segment: [Any] = []
            for index in 0..<count {
                if index >= location && index < (location + length) {
                    segment.append(list[index])
                }
            }
            // 重排序
            segment = LENTools.sortByColumn(list: segment, columns: column, rows: row)
            result += segment
        }
        return result
    }
    
    private static func sortByColumn(list: [Any], columns column:Int, rows row:Int) -> [Any] {
        let count = list.count
        var array: [Any] = []
        
        // 先計(jì)算能排多少列
        var realColumn = count / row
        let remainder = count % row
        if (remainder > 0) { realColumn += 1 }
        
        for i in 0..<realColumn {
            var columnArray: [Any] = []
            for j in 0..<row {
                let index = i + j * realColumn;
                if (index < count) { columnArray.append(list[index]) }
            }
            array += columnArray
        }
        return array
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末稿黄,一起剝皮案震驚了整個(gè)濱河市愧旦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌埠胖,老刑警劉巖糠溜,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異直撤,居然都是意外死亡非竿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門谋竖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)红柱,“玉大人,你說(shuō)我怎么就攤上這事蓖乘〈盖模” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵嘉抒,是天一觀的道長(zhǎng)零聚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)些侍,這世上最難降的妖魔是什么隶症? 我笑而不...
    開(kāi)封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮岗宣,結(jié)果婚禮上沿腰,老公的妹妹穿的比我還像新娘。我一直安慰自己狈定,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布习蓬。 她就那樣靜靜地躺著纽什,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躲叼。 梳的紋絲不亂的頭發(fā)上芦缰,一...
    開(kāi)封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音枫慷,去河邊找鬼让蕾。 笑死浪规,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的探孝。 我是一名探鬼主播笋婿,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼顿颅!你這毒婦竟也來(lái)了缸濒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤粱腻,失蹤者是張志新(化名)和其女友劉穎庇配,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绍些,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捞慌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柬批。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啸澡。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖萝快,靈堂內(nèi)的尸體忽然破棺而出锻霎,到底是詐尸還是另有隱情,我是刑警寧澤揪漩,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布旋恼,位于F島的核電站,受9級(jí)特大地震影響奄容,放射性物質(zhì)發(fā)生泄漏冰更。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一昂勒、第九天 我趴在偏房一處隱蔽的房頂上張望蜀细。 院中可真熱鬧,春花似錦戈盈、人聲如沸奠衔。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)归斤。三九已至,卻和暖如春刁岸,著一層夾襖步出監(jiān)牢的瞬間脏里,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工虹曙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迫横,地道東北人番舆。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像矾踱,于是被迫代替她去往敵國(guó)和親恨狈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355