2014-10-02 8 views
5

पर निर्भर करता है UIScrollview एनीमेशन मैं एक क्षैतिज UIScrollView का उपयोग कर रहा हूं, और मैं सामग्री ऑफ़सेट के एक्स मान के आधार पर पृष्ठभूमि रंग संक्रमण चाहता हूं।सामग्री ऑफसेट

उदाहरण: UIScrollView की चौड़ाई 640px है। जब सामग्री ऑफ़सेट 0px के बराबर होता है, तो पृष्ठभूमि रंग लाल होना चाहिए। जब सामग्री ऑफसेट 320 पीएक्स है, तो पृष्ठभूमि पीले रंग की होनी चाहिए। लेकिन सबसे महत्वपूर्ण हिस्सा यह है कि, जब UIScrollview 0px और 320px के बीच होता है तो पृष्ठभूमि रंग लाल और पीले रंग के बीच होना चाहिए।

संकेत: आईओएस के लिए ट्विटर ऐप एक ही एनीमेशन है जब आप खोज से बाईं ओर स्वाइप करते हैं। नेविगेशन पर लेबल थोड़ा गायब हो जाता है।

उत्तर

12

आप ऑफसेट प्रतिशत के आधार पर रंग बनाने के लिए की जरूरत है।

इस तरह के रंगों के बीच एक शिफ्ट बनाने का सबसे आसान तरीका एचएसबी रंग स्थान का उपयोग करना है।

इसके अलावा, यह एक एनीमेशन नहीं है। स्क्रॉलव्यू द्वारा "एनीमेशन" प्रभाव आपको दिया जाता है। जब भी स्क्रॉल दृश्य बदलता है तो आपको बस रंग सेट करने की आवश्यकता होती है।

प्रतिनिधि विधि में आप ऐसा कुछ कर सकते हैं। और अधिक लचीला

// this just calculates the percentages now and passes it off to another method. 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    // vertical 
    CGFloat maximumVerticalOffset = scrollView.contentSize.height - CGRectGetHeight(scrollView.frame); 
    CGFloat currentVerticalOffset = scrollView.contentOffset.y; 

    // horizontal 
    CGFloat maximumHorizontalOffset = scrollView.contentSize.width - CGRectGetWidth(scrollView.frame); 
    CGFloat currentHorizontalOffset = scrollView.contentOffset.x; 

    // percentages 
    CGFloat percentageHorizontalOffset = currentHorizontalOffset/maximumHorizontalOffset; 
    CGFloat percentageVerticalOffset = currentVerticalOffset/maximumVerticalOffset; 

    [self scrollView:scrollView didScrollToPercentageOffset:CGPointMake(percentageHorizontalOffset, percentageVerticalOffset)]; 
} 

// this just gets the percentage offset. 
// 0,0 = no scroll 
// 1,1 = maximum scroll 
- (void)scrollView:(UIScrollView *)scrollView didScrollToPercentageOffset:(CGPoint)percentageOffset 
{ 
    UIColor *HSBColor = [self HSBColorForOffsetPercentage:percentageOffset.x]; 

    UIColor *RGBColor = [self RGBColorForOffsetPercentage:percentageOffset.x]; 
} 

// HSB color just using Hue 
- (UIColor *)HSBColorForOffsetPercentage:(CGFloat)percentage 
{ 
    CGFloat minColorHue = 0.0; 
    CGFloat maxColorHue = 0.2; // this is a guess for the yellow hue. 

    CGFloat actualHue = (maxColorHue - minColorHue) * percentage + minColorHue; 

    // change these values to get the colours you want. 
    // I find reducing the saturation to 0.8 ish gives nicer colours. 
    return [UIColor colorWithHue:actualHue saturation:1.0 brightness:1.0 alpha:1.0]; 
} 

// RGB color using all R, G, B values 
- (UIColor *)RGBColorForOffsetPercentage:(CGFloat)percentage 
{ 
    // RGB 1, 0, 0 = red 
    CGFloat minColorRed = 1.0; 
    CGFloat minColorGreen = 0.0; 
    CGFloat minColorBlue = 0.0; 

    // RGB 1, 1, 0 = yellow 
    CGFloat maxColorRed = 1.0; 
    CGFloat maxColorGreen = 1.0; 
    CGFloat maxColorBlue = 0.0; 

    // if you have specific beginning and end RGB values then set these to min and max respectively. 
    // it should even work if the min value is greater than the max value. 

    CGFloat actualRed = (maxColorRed - minColorRed) * percentage + minColorRed; 
    CGFloat actualGreen = (maxColorGreen - minColorGreen) * percentage + minColorGreen; 
    CGFloat actualBlue = (maxColorBlue - minColorBlue) * percentage + minColorBlue; 

    return [UIColor colorWithRed:actualRed green:actualGreen blue:actualBlue alpha:1.0]; 
} 

मैं नहीं जानता कि कैसे आरजीबी विधि मध्य मूल्यों पर प्रदर्शन करेंगे बनाने के लिए

संपादित करें। यह बीच में ब्राउन जा सकता है ... लेकिन आप चारों ओर खेल सकते हैं।

यह आपको एनीथिंग को नियंत्रित करने के तरीके के रूप में स्क्रॉल व्यू का उपयोग करके एनिमेट करने का विचार देना चाहिए।

इस विधि का उपयोग करके आप अस्पष्टता, आकार, रोटेशन, फ़ॉन्ट आकार इत्यादि को नियंत्रित कर सकते हैं ... आप कई चीजों को भी जोड़ सकते हैं (जैसे मैंने आरजीबी के साथ किया)।

+1

धन्यवाद, पूरी तरह से काम करता है! – Berendschot

+0

कोई भी मौका यह आरजीबी रंगों के साथ काम करेगा? – Berendschot

+1

@ मार्टन 1 9 0 9 हाँ, लेकिन आरजीबी के साथ एक स्थानांतरण रंग बनाना बहुत कठिन है। मुझे इसे एक सेकंड बदलने दें ... – Fogmeister

-3

अपने scrollview प्रतिनिधि में कुछ इस तरह का प्रयास करें:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    CGPoint a = self.mainScrollView.contentOffset; 
    if(a.x >= 320){ 
     [UIView animateWithDuration:0.5 animations:^{ 
      [self.view setBackgroundColor:[UIColor redColor]]; 
     }]; 
    } 
    else{ 
     [UIView animateWithDuration:0.5 animations:^{ 
      [self.view setBackgroundColor:[UIColor yellowColor]]; 
     }]; 
    } 
} 
+0

डाउनवोट क्यों? यहां तक ​​कि यदि उपरोक्त कोड प्रश्न में व्यक्त विशिष्ट आवश्यकताओं के लिए बिल्कुल सही नहीं है, तो यह संकेत देता है कि पूछताछकर्ता अपने रंग तर्क को काम करने का प्रयास कर सकता है। –

+3

मेरा नीचे वोट नहीं। लेकिन ... यह इस प्रभाव को नहीं बनाएगा कि सवाल पूछने वाला व्यक्ति ढूंढ रहा है। यदि स्क्रॉल व्यू 319 ऑफसेट पर है तो यह पीले रंग के लिए एनिमेट होगा। यह लगभग पूरी तरह से लाल होना चाहिए। इसके अलावा, यह लाल और पीले प्रभाव के बीच आधा रास्ता नहीं देगा जिसे वह ढूंढ रहा है। इसके अलावा, एनीमेशन भी अनावश्यक है। – Fogmeister

संबंधित मुद्दे