列出這樣的問題:
首先看壹下VVeboTableViewDemo的結構(由於我已經翻譯成Swift,所以下面我在Swift版本中分析,和原版本的邏輯壹致。)
其中,DataPrenstenter是我從VVeboTableView中拉出來的,它實際上是讀取數據的,妳不用管。
上圖是vve label中的所有內容,高亮顯示的方法是vve label的核心。
這裏屬於核心文本技術,主要處理特殊文本,采用逐行繪制。
其他方法主要集中在文本高亮和清除內容,不是重點,可以忽略。
在VVeboTableViewCell中,高亮顯示的方法是核心部分。其實和VVeboLabel的思路壹模壹樣,就是在壹張圖片上異步繪制內容,然後顯示出來,這樣可以減少混合,減輕GPU壓力。不貼源代碼,下面會放演示。
這是壹個設計巧妙的班級。在開始研究這門課的思路之前,建議妳先看看這篇文章。當然,如果妳熟悉UIScrollView和這個方法Func scroll view willend drawing(_ scroll view:ui scroll view,with Velocity Velocity: CGPoint,TargetContentOffset:UnsafetablePointer
這個方法是從iOS 5引入的,在didEndDragging之前調用。當willEndDragging方法中的速度為CGPoin.zero(拖動結束時兩個方向都沒有速度)時,didEndDragging的下降為假。也就是說,如果沒有減速過程,將不會調用willBeginDecelerating和didEndDecelerating。另壹方面,當速度不是CGPoin.zero時,滾動視圖將速度作為初始速度,並減速,直到targetContentOffset。值得註意的是,這裏的targetContentOffset是壹個指針。是的,妳可以改變減速運動的目的地,這在實現某些效果時非常有用。
上述文本來源
微信閱讀的橫向滑動和居中效果不僅僅是在改寫UICollectionViewFlowLayout,
也可以通過控制targetContentOffset來實現。
圖中的高亮方法是核心部分。
單元格繪圖判斷邏輯
上面的VVeboTableViewDemo的源代碼已經被完整的分析過了,所以妳在驚嘆作者別出心裁的想法的同時,壹定會好奇這項技術的來源和改進過程。(以下為個人猜測)
通過這篇文章,我認為我們應該了解核心文本、核心圖形、點擊測試視圖和異步繪制。可以通過以下推薦文章掌握前三種技術。異步畫圖在下壹節YYAsyncLayer的源代碼分析中,相信妳會在不知不覺中掌握這項技術。
原始資料
這種技術的出現是為了減輕GPU的壓力,因為圖層混合是由GPU完成的,在這裏CPU幾乎無事可做,所以我們把GPU混合移到CPU的func draw(_ rect: CGRect)來完成需求。
這項技術的快速滾動演示
技術淘汰的原因
由於視網膜屏的出現,原來單位面積像素增加,CPU做的事情更多,導致subViews方法效率低下。
AsyncDisplayKit YYKit等新技術出現。
我覺得VVeboTableViewDemo的出現也應該遵循以上流程。
核心文本:
Swift的CoreText排版神器
公文
核心顯卡:
IOS繪圖教程
妳應該對Swift中的核心圖形有所了解。
官方演示
官方演示Swift版本
在iOS上構建並發用戶界面
響應鏈
點擊測試視圖在iOS事件響應鏈中的應用
IOS事件處理|點擊測試
異步渲染
/IOs-並發/