iOS 頁面滑動與標題切換顏色漸變的聯動效果例項

2022-09-24 17:33:11 字數 3960 閱讀 8122

話不多說,直接上圖,要實現類似如下效果。

這個效果非常常見,這裡著重講講核心**

封裝頂部的pagetitleview

封裝建構函式

封裝建構函式,讓別人在建立物件時,就傳入其實需要顯示的內容 frame:建立物件時確定了

// mark:- 建構函式

init(frame: cgrect, isscrollenable : bool, titles : [string])

設定ui介面

設定ui介面

實現相對來說比較簡單,這裡**從略

封裝底部的pagecotentview

封裝建構函式

封裝建構函式,讓別人在建立物件時,就傳入其實需要顯示的內容

// mark:- 建構函式

init(frame: cgrect, childvcs : [uiviewcontroller], parentviewcontroller : uiviewcontroller)

設定uwww.cppcns.comi介面內容

設定ui介面

// mark:- 懶載入屬性

private lazy var collectionview : uicollectionview = ()

private func setupui()

// 2.新增collectionview

addsubview(collectionview)

}實現uicollectionview的資料來源方法

// mark:- 遵守uicollectionview的資料來源

extension pagecontentview : uicollectionviewdatasource

func collectionview(collectionview: uicollectionview, cellforitematindexpath indexpath: nsindexpath) -> uicollectionviewcell

// 取出控制器

let childvc = childvcs[indexpath.item]

childvc.view.frame = cell.contentview.bounds

cell.contentview.addsubview(childvc.view)

return cell

}}pagetitleview點選改變pagecontentview

通過**將pagetitleview的事件傳遞出去

/// 定義協議

protocol pagetitleviewdelegate : class

@objc private func titlelabelclick(tapges : uitapgesturerecognizer)

let index = view.tag

// 2.滾到正確的位置

scrolltoindex(index)

// 3.通知**

delegate?.pagetitleview(self, didselectedindex: index)

}內部調整

// 內容滾動

private func scrolltoindex(index : int)

// 4.記錄index

currentindex = index

}在pagecontentview中設定當前應該滾動的位置

// mark:- 對外暴露方法

extension pagecontentview

}pagecontentview滾動調整pagetitleview

通過觀察,我們發現:

1> 原來位置的title顏色會逐漸變暗

2> 目標位置的title顏色會逐漸變亮

3> 變化程度是和滾動的多少相關

由此得出結論:

我們一共需要獲取三個值

1> 起始位置下標值

2> 目標位置下標值

3> 當前滾動的進度

其實前2點可以由第3點計算而來,可以只需要將進度傳遞出去。

根據進度值處理標題顏色漸變及滑塊邏輯

。當前進度值唯一確定了標題的狀態,計算出需要發生顏色變化的兩相鄰標題索引

。注意:下標值需要防止越界問題,臨界點的處理

實現**

extension pagecontentview : uicollectionviewdelegate

func scrollviewdidscroll(scrollview: uiscrollview)

// 1.定義獲取需要的資料

var progress : cgfloat = 0

let currentoffsetx = scrollview.contentoffset.x

let scrollvieww = scrollview.bounds.width

// 1.計算progress

progress = currentoffsetx / scrollvieww

// 3.將progress傳遞給titleview

delegate?.pagecontentview(self, progress: progress)

}}根據滾動傳入的值,調整pagetitleview

兩種顏色必須使用rgb值設定(方便通過rgb實現漸變效果)

private let knormalrgb : (cgfloat, cgfloat, c = (85, 85, 85)

private let kselectrgb : (cgfloat, cgfloat, cgfloat) = (255, 128, 0)

private let kdeltargb = (kselectrgb.0 - knormalrgb.0, kselectrgb.1 - knormalrgb.1, kselectrgb.2 - knormalrgb.2)

private let knormaltitlecolor = uicolor(red: 85/255.0, green: 85/255.0, blue: 85/255.0, alpha: 1.0)

private let kselecttitlecolor = uicolor(red: 255.0/255.0, green: 128/255.0, blue: 0/255.0, alpha: 1.0)

調整scrollline及兩個label顏色漸變

// mark:- 對外暴露方法

extension pagetitleview

func changelabel(progress: cgfloat)

print("leftlabelindex = \(leftlabelindex)")

var rightindex = leftlabelindex + 1

if rightindex >= 3

print("rightindex = \(rightindex)")

let rightlabel = titlelabels[rightindex]

//滑塊的邏輯

let movetotalx = leftlabel.frame.width

let movex = movetotalx * ratio

scrollline.frame.o程式設計客棧rigin.x = leftlabel.frame.origin.x + movex

顏色的漸變

// 3.1.取出變化的範圍

let colordelta = (kselectedcolor.0 - knormalcolor.0, kselectedcolor.1 - knormalcolor.1, kselectedcolor.2 - knormalcolor.2)

if leftlabelindex != rightindex

//程式設計客棧 4.記錄最新的index

currentindex = leftlabelindex

}}本文標題: ios 頁面滑動與標題切換顏色漸變的聯動效果例項

本文位址:

滑動切換頁面

1.首先需要在activity介面中新增乙個view 2.view 需要搭配乙個介面卡才能使用,介面卡可以決定建立多少各view,返回當前要顯示的view。有多種型別的adapter,這裡使用的是fragment adapter。public classvpadapterextendsfragmen...

iOS 多頁面滑動

最近先來有空,寫了乙個多頁面滑動的框架,先上圖 思路 1.標題使用uicollectionview實現,有兩種模式,標題居中平均長度,另外一種模式是標題靠左 2.下面的頁面切換使用乙個uipageviewcontroller 標頭檔案 hrscrollpagecontroller.h 多頁滑動 cr...

ios 橫向滾輪效果 ios橫向選單 頁面滑動

ios橫向選單 頁面滑動 檢視次數 9122 大小 11 b demo 橫向選單 頁面滑動 例子uiviewcontroller vc1 uiviewcontroller alloc init vc1.view setbackgroundcolor uicolor redcolor uiviewco...