2012-06-14 18 views
5

में एक अंतराल में बदलता है मेरे पास एक ऐप है जो उपयोगकर्ता को एक परिवर्तनीय संरचना में एक वीडियो रिकॉर्ड करने की अनुमति देता है। मैं कुछ पाठ सेट करना चाहता हूं जो ऊपर आ जाएंगे और उसके बाद एक अंतराल में बदल जाएंगे जब मैं निर्यात के बाद इसे वापस चलाता हूं।एक CATextlayer बनाएं जो AVMutableVideoComposition

उदाहरण के लिए, यदि पहला शब्द "कुत्ता" है, तो मैं इसे सेट अप करना चाहता हूं ताकि "बिल्ली" उस स्ट्रिंग को X सेकेंड बाद बदल दे, और उसके बाद X सेकंड बाद एक और शब्द के साथ प्रतिस्थापित किया जाए।

मेरे वीडियो एक AVMutableComposition AVExportSession का उपयोग करने से निर्यात किया जाता है और मेरे शब्दों का उपयोग कर एक CATextlayer इतना है कि यह करने के लिए जोड़ा जोड़ दिया जाएगा:

//code to setup AVMutableComposition 
... 
//code to setup CATextLayer and AVMutableVideoComposition 
    CALayer *animatedTitleLayer = [CALayer layer]; 
    CATextLayer *titleLayer = [[CATextLayer alloc] init]; 
    titleLayer.string = @"Text I want to change at an interval"; 
    titleLayer.alignmentMode = kCAAlignmentCenter; 
    titleLayer.bounds = CGRectMake(150, 50, 124, 354); 
    titleLayer.position = CGPointMake(120, 270); 
    titleLayer.bounds = CGRectIntegral(CGRectMake(0, 0, 250, 150)); 
    titleLayer.opacity = 1; 
    titleLayer.backgroundColor = [UIColor purpleColor].CGColor; 
    [animatedTitleLayer addSublayer:titleLayer]; 
    animatedTitleLayer.position = CGPointMake(40, 5);   
    CALayer *parentLayer = [CALayer layer]; 
    CALayer *videoLayer = [CALayer layer]; 
    parentLayer.frame = CGRectMake(0, 0, 320, 480); 
    videoLayer.frame = CGRectMake(0, 0, 320, 480); 
    [parentLayer addSublayer:videoLayer]; 
    [parentLayer addSublayer:animatedTitleLayer]; 
    parentLayer.preferredTransform = rotationTransform; 
    AVMutableVideoComposition *videoComposition; 
    videoComposition = [AVMutableVideoComposition videoComposition]; 
    videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer]; 

//code to setup AVExportSession 
... 

मेरा प्रश्न है: कैसे मैं पाठ बदलने के लिए एक अंतराल पर कर सकते हैं कि मैं तारों के लिए सेट है कि मैं नामित?

किसी भी सुझाव की सराहना की जाएगी।

+0

कोई मदद मिली? जवाब पता लगाया? –

उत्तर

0

यदि आप जो हासिल करने की कोशिश कर रहे हैं, वह CATextLayer के अंतराल के साथ रनटाइम पर पाठ बदल रहा है, तो आपका एक विकल्प पदानुक्रम में उस परत को खोजना और टाइमर थ्रेड पर अपना टेक्स्ट बदलना है। स्ट्रिंग्स को प्रतिस्थापित करने के लिए सरणी प्रदान की जाती है, आप इसे रनटाइम पर ढूंढने के बाद परत के टेक्स्ट को सेट कर सकते हैं।

आप हाथ पर अपने पहले समस्या को हल करने के साथ शुरू सिर कर सकते हैं: खोजें पदानुक्रम

सभी CALayer की उपवर्गों पदानुक्रम कि है name में परत की पहचान के लिए एक संपत्ति को परिभाषित करता है में परत।

तो आप क्या कर सकते हैं यह है कि आप अपने CATextLayer पर name दे सकते हैं। आप के मामले में अपने अपने titleLayer:

titleLayer.name = "changingTextLayer" 

तो आप इसके पदानुक्रम में खोज कर सकते हैं:

for (CALayer *layer in [superLayerOfMyLayer sublayers]) { 
     if ([[layer name] isEqualToString:"changingTextLayer"]) { 
      return layer; 
     } 
    } 

और आप पाठ को बदल सकते हैं एक बार आप इसे पाते हैं:

titleLayer.string = @"Changed text"; 

तुम सब अब करना है एक टाइमर सेट करना और सरणी में स्ट्रिंग होने तक, हर दूसरे/आपके मुनाफे के समय अंतराल को करें।

आपको CALayer को CATextLayer पर डालना होगा।

शुभकामनाएं।

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