2014-08-30 56 views
0

我有一個3頁的水平滾動視圖。iOS梯度動畫與uiscrollview分頁

我想每個頁面都有一個不同的背景顏色,並在三種顏色之間繪製漸變。

Page 1綠色,第2頁藍色和第3頁紅色。 我該怎麼做?

我在想ScrollViewDidScroll委託方法:

- (void)scrollViewDidScroll:(UIScrollView *)sender 
{ 

CGFloat pageWidth = self.statisticScrollView.frame.size.width; 

float fractionalPage = self.statisticScrollView.contentOffset.x/pageWidth; 
NSLog(@"fractional Page: %f", fractionalPage); 

NSInteger lowerNumber = floor(fractionalPage); 
NSLog(@"lower Page: %i", lowerNumber); 

NSInteger upperNumber = lowerNumber + 1; 
NSLog(@"upper Page: %i", upperNumber); 

if (self.lastContentOffset > sender.contentOffset.x){ 
    //RIGHT ---> 
    if (lowerNumber == 0) { 
     //gradient green to blue 
    }else if (lowerNumber == 1){ 
     //gradient blue to red 
    }else if (lowerNumber == 2){ 
     //end pages 
    } 
}else if (self.lastContentOffset < sender.contentOffset.x){ 
    //LEFT <---- 
    if (lowerNumber == 0) { 
     //gradient blue to green 
    }else if (lowerNumber == 1){ 
     //gradient red to blue 
    }else if (lowerNumber == 2){ 
     //end pages 
    } 
} 
} 

我可以使用fractionalPage來設置漸變的百分比是多少?

我讀了startPointendPointCAGradientLayer的屬性,但它似乎無法正常工作。

任何建議將不勝感激! 預先感謝您

回答

0

startPointendPoint性質被測量從0到1,而不是在其可以是你所遇到的問題的視圖的座標系。所以要從一邊到另一邊運行漸變,你需要像這樣聲明它。

gradlayer.startPoint = CGPointMake(0, 0.5); 
gradlayer.endPoint = CGPointMake(1, 0.5); 

實現你想要做的一個簡單的方法是添加一個預先配置了梯度的滾動視圖的子圖層。

CGFloat width = CGRectGetWidth(self.view.frame); 
CGFloat height = CGRectGetHeight(self.view.frame); 

self.scroller.contentSize = CGSizeMake(3*width, height); 
self.gradlayer = [CAGradientLayer layer]; 
self.gradlayer.frame = CGRectMake(0, 0, width*3, height); 

[self.scroller.layer addSublayer:self.gradlayer]; 

self.gradlayer.colors = @[((id)[UIColor redColor].CGColor),((id)[UIColor greenColor].CGColor),((id)[UIColor blueColor].CGColor)]; 

self.gradlayer.startPoint = CGPointMake(0, 0.5); 
self.gradlayer.endPoint = CGPointMake(1, 0.5); 

但是,如果您的內容尺寸變得更大,這可能會導致內存問題。

我看了一下模擬人生,看起來並沒有增加更多的頁面。我去了10,它似乎與3頁大致相同,但這是一個考慮因素,所以您可能不得不回到您根據水平偏移量調整顏色數組的原始理論。

我認爲scrollviews內部分頁有效地處理其子層以避免這種情況。

雖然甜美的配色方案。傑里加西亞會感到驕傲。

enter image description here

+0

您好,非常感謝您的回覆。我試過你的代碼。它可以工作,但不是我想的效果......無論如何,謝謝!我正在嘗試使用'fractionalPage'的值(如果我在第一頁中的值從0.0變爲1.0 - 如果我在第二頁中,則值從1.0變爲2.0 ...)來設置最終顏色的位置(如果我們位於第一頁,則爲藍色)。 – Tenaciousd93 2014-08-31 15:44:03