2013-07-11 11 views
10

मैं iOS SDK के साथ प्रयोग कर रहा हूँ में स्क्रॉल पर CALayer का मुखौटा स्थानांतरण और मैं निम्नलिखित UIView संरचना है:एक scrollview

  • UIView
    • UIImageView - केवल एक पृष्ठभूमि चित्र
    • UIImageView (एक CALayer साथ मास्क)
    • UIScrollView
      • Label

बहुत ही सरल संरचना, UIScrollView पारदर्शी परत है और दूसरा UIImageView उस पर एक मुखौटा है। मैं जो करने की कोशिश कर रहा हूं वह यह है कि CALayer मास्क स्क्रॉल व्यू में सामग्री की स्थिति के अनुसार इसकी स्थिति को स्थानांतरित करेगा। यदि उपयोगकर्ता स्क्रॉल करता है, तो मास्क की स्थिति अपडेट की जानी चाहिए।

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGPoint contentOffset = scrollView.contentOffset; 
    contentOffset.y = -contentOffset.y; 

    self.overlayImageView.viewlayer.mask.position = contentOffset; 
} 

मास्क viewDidLoad में बनाई गई है और देखने नियंत्रक के जीवन चक्र के दौरान परिवर्तन नहीं करता है: मैं पहले से ही UIScrollView के प्रतिनिधि का उपयोग कर इस समस्या का समाधान।

समस्या यह है कि मास्क स्थिति अद्यतन बहुत धीमी है। इस तरह यह मुखौटा स्क्रॉल दृश्य की सामग्री का पालन कर रहा है, इसके साथ स्क्रॉल नहीं कर रहा है। scrollViewDidScroll प्रतिनिधि विधि को सही तरीके से बुलाया जाता है।

समस्या के बारे में बेहतर ढंग से समझने के लिए, मैं आईओएस सिम्युलेटर में किए गए एक वीडियो को जोड़ रहा हूं। http://www.youtube.com/watch?v=w3xRl3LTngY

तो सवाल यह है:

वहां जल्द मुखौटा अद्यतन करने बनाने के लिए एक रास्ता है या यह आईओएस की सीमा है?

उत्तर

16

CALayer अंतर्निहित स्थिति जैसे कुछ संपत्तियों के लिए एनिमेटेड हैं उन्हें निष्क्रिय करने की कोशिश:

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

[CATransaction begin]; 
    [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 
CGPoint contentOffset = scrollView.contentOffset; 
contentOffset.y = -contentOffset.y; 

self.overlayImageView.viewlayer.mask.position = contentOffset; 
[CATransaction commit]; 

} 
+1

बढ़िया है, समस्या का समाधान होता। आपका बहुत बहुत धन्यवाद। मास्क स्थिति परिवर्तन अब और अधिक तरल पदार्थ हैं। – Legoless

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