當前位置:成語大全網 - 書法字典 - 從VVeboTableViewDemo到YYAsyncLayer (1)

從VVeboTableViewDemo到YYAsyncLayer (1)

其實我很早就知道vvebotabableviewdemo了,也壹直想研究壹下。最近終於有時間了。我用Swift (VVeboTableViewDemo.swift)做了VVeboTableViewDemo,花了兩周時間通讀了壹系列關於iOS優化的文章至少壹遍。我發現他們把優化點總結的很松散,大部分都不適合我這種小盤。

列出這樣的問題:

首先看壹下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-並發/