實現仿UC瀏覽器首頁下拉動畫

2022-05-30 21:54:13 字數 1889 閱讀 8598

經常用uc看到首頁有這麼乙個動畫,就仿造寫了一下。

實現分析

1.畫曲線的動畫

這個一眼看去就想到用貝塞爾曲線畫,來看貝塞爾曲線方法,給出兩個定點,和乙個控制點就可以畫。

cgcontextaddquadcurvetopoint(context,控制點x,控制點y,目標點x,目標點y);

於是按照下圖,兩個黃色的點是定點,綠色的是控制點,於是畫出了這樣的圖。

看左邊的圖,中間有大片空白,看起來很浪費螢幕空間,使用者體驗不太好,於是想著怎麼讓貝塞爾曲線過某個定點,比如讓曲線過綠色的定點,而不是把控制點設在綠色的位置。

重訴一下,現有的方法是給出兩個定點和乙個控制點,能畫一條曲線。

現在是要,已知兩個定點,和過另外乙個定點d,畫一條曲線。

我現在想讓這條曲線過綠色的點,就像下圖那樣,求控制點座標是多少?

看下圖,求出控制點座標的過程

由上圖就得出了控制點的座標,然後就可以畫出「圖3」的樣子了,實際中我覺得圖3貼太緊了,也不美觀,於是 yc 乘了個0.6的係數,即 yc = 0.6 * yc,就看起來比較順眼了。

2.頁面結構

頁面結構大概是這樣,底下的 tableview 鋪滿整個 view,然後藍色的headerview 加在 tableview 的上面,不是加 tableview.tableheaderview 上面哦,至於為什麼你加加看就知道了。會跟著 tableview 動

3.不規則事件點選,事件穿透

headerview 上有乙個頭像,是可以點選的,其他地方的點選事件要傳給底下的 tableview 也叫事件穿透,通過修改 hittest 可以實現

- (uiview *)hittest:(cgpoint)point withevent:(uievent *)event;

hittest 主要用來做事件分發的,可以實現不規則點選,它在整個 view 結構上是遞迴的,深度優先的,今天不講演算法,因為 hittest 太厲害,不規則點選用 pointinside 函式就夠了。

- (bool)pointinside:(cgpoint)point withevent:(uievent *)event;

這個函式會被 hittest 呼叫,返回 false 表示點選的不是自己,返回 true 表示點選的是自己。

只要判斷點選的 point 在不在頭像的那個圓圈裡面就可以了,就是判斷點在不在圓內,高中講過了,point 到圓心的距離小於半徑就表示在了,那麼返回 true 就行。具體的還是看**吧。

如果有多個控制項,需要自己確定每個控制項的點選區域。

4.後期改進

要改的地方,就是當使用者手指鬆開的時候,scrollviewwillenddragging,這個方法內判斷一下,contentoffset.y 值,如果超過多少值,那麼自動**乙個 block,可實現下拉重新整理。

解決UC瀏覽器或微信瀏覽器上flex相容問題

在uc瀏覽器上使用display flex 時會不起作用,要加上相容性寫法,如下 display webkit box old ios 6 safari 3.1 6 display moz box old firefox 19 buggy but mostly works display ms fl...

uc瀏覽器手機模擬 實用簡潔的瀏覽器,專注體驗!

如果你也厭倦了介面亂七八糟的瀏覽器,不妨試試它們。這些極簡主義的瀏覽器大多是回歸初心的作品,它們執行能夠更輕快,主介面也更簡潔,使用效率也隨之提高。小嘟之前也給大家分享過主打極簡主義的via瀏覽器,via瀏覽器無論是從速度上,還是拓展功能上,都有不錯的表現。為了給大家更多選擇,這次小嘟打算再分享一款...

關於UC瀏覽器flex的相容問題

這些天再做乙個wap的專案,本想著手機上不用考慮相容性問題,可以大刀闊斧搞,ie678!在pc上完成頁面開發,在chrome模擬器上做頁面的矯,good!一切看起來都是很美好的樣子 開啟手機測試頁面,想想都有點小激動呢!掃碼,臥槽,啥瀏覽器這是!臥槽,這是uc嗎!專案逼近,必須得把這個醜陋的輸入框改...