News Digest(雅虎新聞)模仿秀第一彈

最近得空做了一個(gè)小的新聞?lì)怉PP或油,基本上都是照著News Digest的模子刻出來(lái)的族操,之所以這個(gè)為參考锐峭,是因?yàn)橛X(jué)得News Digest這個(gè)APP做得真的很酷炫停忿!


猛戳這里獲取整個(gè)項(xiàng)目源代碼
項(xiàng)目前端主要由swift編寫(xiě)驾讲,本地?cái)?shù)據(jù)用CoreData,后端由Node.js編寫(xiě)席赂,后臺(tái)數(shù)據(jù)庫(kù)用MongoDB吮铭。

News Digest(雅虎新聞)模仿秀第二彈
News Digest(雅虎新聞)模仿秀第三彈
News Digest(雅虎新聞)模仿秀第四彈

先上幾張效果圖讓大家看一下:

點(diǎn)擊APP進(jìn)入界面
點(diǎn)擊具體新聞查看
左右切換新聞
點(diǎn)擊右上角按鈕倒計(jì)時(shí)以及選擇五天內(nèi)新聞

今天先講首頁(yè)部分的實(shí)現(xiàn)吧

  1. UITableView
    整個(gè)首頁(yè)其實(shí)就是一個(gè)UITableView,有三種類(lèi)型的Cell


    三個(gè)Cell

    MainTopTableViewCell是頂部這個(gè)Cell
    MainTableViewCell是中間的Cell
    MainBottomTableViewCell是底部那個(gè)Cell(顯示已閱那個(gè))
    剩下兩個(gè)cell.xib是MainBottomTableViewCell里面的颅停,因?yàn)槔锩嬗幸粋€(gè)UICollectionView.

  2. MainTopTableViewCell


    首頁(yè)

    時(shí)間是固定在Cell上面谓晌,最外層那個(gè)Button是固定在ViewController上面的,其實(shí)就是底層一張圖片癞揉,圖片上面再放一個(gè)圖片(也就是那個(gè)梯形)
    現(xiàn)在說(shuō)說(shuō)下拉放大圖片并且文字不隨著圖片下拉的效果

    //MARK: - UIScrollViewDelegate
    func scrollViewDidScroll(scrollView: UIScrollView) {
        let offset_y = scrollView.contentOffset.y;
        
        // contentOffset.y < 0
        guard let cell = self.mainTV.cellForRowAtIndexPath(NSIndexPath.init(forRow: 0, inSection: 0)) as? MainTopTableViewCell else {
            // MainTopTableViewCell 已經(jīng)不在visiableCells數(shù)組
        
            let distance = self.topCellHeight - self.markFirstCellHeight
            if offset_y > distance {
                if self.lastOffset > offset_y {
                    self.menuButton.hidden = false
                }
                else{
                    self.menuButton.hidden = true
                }
            }
            else {
                self.menuButton.hidden = false
            }
            
            self.lastOffset = offset_y
            return
        }
        if offset_y < 0 {
            // BackgroundImage
            var imageRect = cell.backgroundImage.frame
            imageRect.origin.y = offset_y
            imageRect.size.height = self.topCellHeight - offset_y
            cell.backgroundImage.frame = imageRect
            // Date And Time
            var dateRect = cell.currentDate.frame
            var timeRect = cell.currentTime.frame
            dateRect.origin.y = offset_y + 12
            timeRect.origin.y = offset_y + 49
            cell.currentDate.frame = dateRect
            cell.currentTime.frame = timeRect
        }
        else {
            // 恢復(fù)到原始狀態(tài)
            cell.backgroundImage.frame = CGRectMake(0, 0, WIDTH, self.topCellHeight)
            cell.currentDate.frame = CGRectMake(12, 12, 110, 29)
            cell.currentTime.frame = CGRectMake(12, 49, 110, 21)
            // Mark Height
            self.markFirstCellHeight = cell.heightConstraint.constant
        }
        
        // 是否隱藏菜單按鈕
        let distance = self.topCellHeight - self.markFirstCellHeight
        if offset_y > distance {
            if self.lastOffset > offset_y {
                self.menuButton.hidden = false
            }
            else{
                self.menuButton.hidden = true
            }
        }
        else {
            self.menuButton.hidden = false
        }
        self.lastOffset = offset_y
    }

這里guard條件先判斷MainTopCell在不在當(dāng)前屏幕內(nèi)纸肉,不在的話,直接判斷需要不需要隱藏右上角按鈕即可
如果在的話烧董,offset_y<0的時(shí)候毁靶,也就是在最頂部下拉的時(shí)候,計(jì)算下拉數(shù)值逊移,然后重新賦值給頂部時(shí)間预吆,也就是把控件的origin.y 改成下拉了多少,就能保持頂部時(shí)間不動(dòng)胳泉。圖片放大的話拐叉,也只是修改圖片origin.y岩遗,因?yàn)閳D片的模式設(shè)成了AspectFill,所以當(dāng)origin.y改變的時(shí)候凤瘦,圖片也會(huì)相應(yīng)放大

  1. MainBottomTableViewCell
    這里其實(shí)就是一個(gè)UICollectionView宿礁,通過(guò)CircleLayout重新排列UICollectionView的出現(xiàn)位置就好
    override func prepareLayout() {
        super.prepareLayout()
        
        // Assign
        self.size = self.collectionView!.frame.size
        self.cellCount = CGFloat(self.collectionView!.numberOfItemsInSection(0))
        self.center = CGPointMake(self.size.width/2.0, self.size.height/2.0)
        self.radius = min(self.size.width/2.0, self.size.height)/2.0
    }

首先prepareLayout初始化一些參數(shù),比如說(shuō)UICollectionViewCell距離圓心的半徑蔬芥,Cell數(shù)量等等
詳情請(qǐng)參考這里UICollectionViewLayout之CircleLayout
與上面這個(gè)例子有點(diǎn)不同的是梆靖,在這里我們定義了

    override func layoutAttributesForSupplementaryViewOfKind(elementKind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? {
        let attributes = UICollectionViewLayoutAttributes(forSupplementaryViewOfKind: elementKind, withIndexPath: indexPath)
        attributes.size = CGSizeMake(108, 80)
        attributes.center = self.center
        return attributes
    }

這個(gè)就是顯示在BottomCell中間的已閱字樣,之前我是選擇用DecorationView的笔诵,類(lèi)的名字都已經(jīng)叫DecorationCollectionReusableView了返吻,但是發(fā)現(xiàn)裝飾視圖重用的時(shí)候不會(huì)刷新,于是就改用了SupplementaryView
每次重用BottomCell乎婿,都會(huì)調(diào)用下面方法测僵,刷新已閱數(shù)量

    func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
        let view = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "Supplementary", forIndexPath: indexPath) as! DecorationCollectionReusableView
        
        self.number = 0
        for model in self.newsArray {
            if model.isRead?.intValue == 1 {
                self.number += 1
            }
        }
        view.readLabel.text = "\(self.number)/\(self.newsArray.count)"
        return view
    }

上一張效果圖:


BottomCell
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谢翎,隨后出現(xiàn)的幾起案子捍靠,更是在濱河造成了極大的恐慌,老刑警劉巖森逮,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榨婆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吊宋,警方通過(guò)查閱死者的電腦和手機(jī)纲辽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)璃搜,“玉大人拖吼,你說(shuō)我怎么就攤上這事≌馕牵” “怎么了吊档?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)唾糯。 經(jīng)常有香客問(wèn)我怠硼,道長(zhǎng),這世上最難降的妖魔是什么移怯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任香璃,我火速辦了婚禮,結(jié)果婚禮上舟误,老公的妹妹穿的比我還像新娘葡秒。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布眯牧。 她就那樣靜靜地躺著蹋岩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪学少。 梳的紋絲不亂的頭發(fā)上剪个,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音版确,去河邊找鬼扣囊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛阀坏,可吹牛的內(nèi)容都是我干的如暖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼忌堂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了酗洒?” 一聲冷哼從身側(cè)響起士修,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎樱衷,沒(méi)想到半個(gè)月后棋嘲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矩桂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年沸移,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侄榴。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雹锣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出癞蚕,到底是詐尸還是另有隱情蕊爵,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布桦山,位于F島的核電站攒射,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏恒水。R本人自食惡果不足惜会放,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钉凌。 院中可真熱鬧咧最,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至咨察,卻和暖如春论熙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摄狱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工脓诡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人媒役。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓祝谚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親酣衷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子交惯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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