iOS 仿簡(jiǎn)書(shū)首頁(yè)等按鈕點(diǎn)擊切換界面包含scrollView的滾動(dòng)、點(diǎn)擊切換子界面

Git: https://github.com/DrunkenMouse/clickCutViewAndContainScrollViewClickAndCutView

效果圖:?

通過(guò)點(diǎn)擊切換頁(yè)面功能,其實(shí)就是通過(guò)點(diǎn)擊事件切換不同的View。是不是覺(jué)得有點(diǎn)廢話?然而不管是本Demo中用到的外層按鈕點(diǎn)擊切換View,還是子View中通過(guò)scrollView掛載的Label點(diǎn)擊切換View、蘋果提供的segmented點(diǎn)擊切換View都是同樣的方法。

那么沒(méi)有點(diǎn)擊事件怎么辦?就好比Label一樣,沒(méi)有點(diǎn)擊觸發(fā)事件怎么辦?那就自己添加手勢(shì)。本Demo就是通過(guò)給Label添加手勢(shì)完成的點(diǎn)擊事件。

外層的View是通過(guò)創(chuàng)建新的ViewController,將其加到自身的子ViewController,通過(guò)按鈕的點(diǎn)擊事件切換不同的ViewController.View,切換前移除舊的View,添加新的View。

FirstViewController *discountVc=[[FirstViewController alloc]init];

[self addChildViewController:discountVc];UIViewController *oldVc = self.childViewControllers[from%3];

[oldVc.view removeFromSuperview];

UIViewController *newVc = self.childViewControllers[to%3];

newVc.view.frame = CGRectMake(0,64+49, W, H-64-49);

[self.view addSubview:newVc.view];

這有個(gè)很大的弊端:子頁(yè)面的添加。

如果要添加很多個(gè)子頁(yè)面,就要?jiǎng)?chuàng)建很多個(gè)子ViewController,這就很麻煩了。所以scrollView的點(diǎn)擊切換界面我用的是CollectionView。

CollectionView的Cell設(shè)置為我們需要展示的View寬高,間距為0.不同的View展示不同的內(nèi)容,scrollView點(diǎn)擊時(shí)只要滾動(dòng)當(dāng)前CollectionView即可,甚至其自帶Cell的重用機(jī)制,可以自動(dòng)幫我們節(jié)省內(nèi)存。

而Cell切換時(shí),如何讓當(dāng)前欄目居中那?只要計(jì)算下如果當(dāng)前scrollView掛載的Label要居中,應(yīng)該偏移多少X即可。但要注意一點(diǎn),如果不想讓最左邊的Label也跑到中間,或最右邊的Label也跑到中間就需要計(jì)算出兩個(gè)偏移的最小與最大值。

//計(jì)算應(yīng)該滾動(dòng)多少

CGFloat needScrollOffsetX = self.currentSelectedLabel.center.x - self.channelScrollView.bounds.size.width * 0.5;

//最大允許滾動(dòng)的距離

CGFloat maxAllowScrollOffsetX = self.channelScrollView.contentSize.width - self.channelScrollView.bounds.size.width;

//最小就是0

而關(guān)于底部紅色標(biāo)簽它就是一個(gè)View,當(dāng)按鈕或Label被點(diǎn)擊時(shí)設(shè)置下其frame即可,如果是想移動(dòng)到當(dāng)前需要到達(dá)的位置,通過(guò)UIView動(dòng)畫即可,就不多說(shuō)了。詳情請(qǐng)看Demo

PS:本想把keep里的視頻播放寫出來(lái)的,但奈何最近正在寫直播跟一些collection的動(dòng)畫效果等,就一直沒(méi)時(shí)間再去寫了,不過(guò)有空了肯定會(huì)去寫的,等寫好了再發(fā)出來(lái)吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,726評(píng)論 1 14
  • 不敢說(shuō)一個(gè)夏天是在家宅過(guò)去的,可自從天氣越來(lái)越熱的時(shí)候,心情和脾氣也越來(lái)越不穩(wěn)定,很容易被一句話搞得火氣騰騰...
    lucky布丁閱讀 303評(píng)論 3 2
  • 在當(dāng)今社會(huì)越來(lái)越多的人因?yàn)楦鞣N各樣的原因而導(dǎo)致一日三餐不能正常用餐,久而久之,就會(huì)發(fā)現(xiàn)胃總是會(huì)有不舒服,若不及時(shí)治...
    夢(mèng)在龍江a閱讀 311評(píng)論 0 0

友情鏈接更多精彩內(nèi)容