2012-10-10 28 views
8

मेरे पास एक UIScrollView है जिसमें विभिन्न सबव्यूव (UIImageViews, UILabels और मानक UIViews) शामिल हैं। UIImageViews में से कुछ आंशिक रूप से अन्य UIViews द्वारा कवर किए गए हैं।फ्डिंग यूआईवी व्यू को देखने के लिए उपशीर्षक

हालांकि, जब मैं UIScrollView को फीका करता हूं, तो UIImageViews के आंशिक रूप से कवर किए गए हिस्सों को एनीमेशन के संक्षिप्त पल के लिए उजागर किया जा रहा है।

मैं उसी एनीमेशन में एक ही समय में स्क्रॉलव्यू और इसकी सभी सामग्री को फीका करने में सक्षम होना चाहता हूं - यानी आंशिक रूप से कवर की गई किसी भी छवि को प्रकट नहीं करना।

यदि यह संभव नहीं है, तो मैं हमेशा अन्य सभी नियंत्रणों के ऊपर एक UIView जोड़ सकता हूं और इसे सब कुछ छिपाने के लिए अल्फा 0 से 1 तक फीका कर सकता हूं, लेकिन मुझे यकीन है कि एक दृश्य पर एक पूर्ण फीका करने का एक तरीका है और यह सब सबूत है।

मैं इस कोशिश की:

[UIView beginAnimations:nil context:NULL]; 
[scrollViewResults setAlpha:0.0f]; 
[UIView commitAnimations]; 

और मैं इस की कोशिश की है:

- (IBAction)questionGroupChanged:(UIButton*)sender { 
    [UIView beginAnimations:nil context:NULL]; 
    [self fadeViewHierarchy:scrollViewResults toAlpha:0.0f]; 
    [UIView commitAnimations]; 
} 

- (void)fadeViewHierarchy:(UIView*)parentView toAlpha:(float)alpha { 
    [parentView setAlpha:alpha]; 
    for (UIView *subView in parentView.subviews) { 
     [self fadeViewHierarchy:subView toAlpha:alpha]; 
    } 
} 

लेकिन मैं अभी भी यह फटा नहीं गए हैं। कोई विचार? * (आईओएस 4 और + पर उपलब्ध है)

जैसा:

- (void)fadeAllViews 
{ 
    [UIView animateWithDuration:2 
    animations:^{ 
     for (UIView *view in allViewsToFade) 
      view.alpha = 0.0; 
    } 
    completion:^(BOOL finished){} 
    ]; 
} 

उत्तर

13

इसका कारण यह है जिस तरह से काम करता है के कंपोज़िटर होता

+2

भी उचित पैमाने को सेट करना न भूलें, या आपके रास्टरराइड फीड रेटिना डिस्प्ले पर शर्टी दिखेंगे। view.layer.rasterizationScale = [यूआईस्क्रीन मुख्य स्क्रीन]। स्केल; – dizy

-2

आप UIView वर्ग तरीकों + animateWithDuration के साथ प्रयास किया। क्योंकि यह कुछ अतिरिक्त स्मृति और ग्राफिक्स प्रसंस्करण समय तक का समय लग जाएगा

view.layer.shouldRasterize = YES; 

आप शायद ही एनीमेशन के दौरान इसका सक्षम होना चाहिए: आप जब यह/बाहर fading दृश्य की परत पर रैस्टराइज़ेशन सक्रिय करना होगा।

+0

नहीं:

- (void)fadeView:(UIView*)view toAlpha:(CGFloat)alpha { view.layer.shouldRasterize = YES; [UIView animateWithDuration:0.75 animations:^{ view.alpha = alpha; } completion:^(BOOL finished){ view.layer.shouldRasterize = NO; }]; } 

इस प्रकार, आपके scrollViewResults का उपयोग कर, यह के रूप में लागू किया जाएगा। यह काम नहीं किया। इमानुअल हालांकि वैसे भी धन्यवाद। – theDuncs

4

माइक का जवाब सही है और वह इसके लिए सभी क्रेडिट का हकदार है। बस वर्णन करने के लिए, यह ऐसा दिखाई देगा:

[self fadeView:scrollViewResults toAlpha:0.0f]; 
+0

चित्रण @Rob के लिए धन्यवाद – Stephan