Orp*_*ury 5 core-animation ios avmutablecomposition catextlayer
我有一个应用程序,允许用户以可变组合录制视频.我想设置一些文本,然后在用户在导出后播放时设置的间隔进行更改.
例如,如果第一个单词是"dog",那么我想设置它以便"cat"在X秒后替换该字符串,然后在X秒后用另一个单词替换.
我的视频是使用AVExportSession从AVMutableComposition导出的,我的文字将使用添加的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
...
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何将文本更改为我设置为我指定的字符串的间隔?
任何建议将不胜感激.
小智 0
如果您想要实现的目标是以CATextLayer一定时间间隔更改运行时的文本,那么您的选择之一是在层次结构中搜索该层并在某种计时器线程上更改其文本。提供了要替换的字符串数组,一旦在运行时找到图层文本,就可以设置它。
您可以先解决手头的第一个问题: 搜索层次结构中的图层
CALayer 的所有子类都定义了一个属性,用于标识层次结构中的层name。
所以你能做的就是你可以给name你的CATextLayer. 在你的情况下,它是你的titleLayer:
titleLayer.name = "changingTextLayer"
Run Code Online (Sandbox Code Playgroud)
然后你可以在层次结构中搜索它:
for (CALayer *layer in [superLayerOfMyLayer sublayers]) {
if ([[layer name] isEqualToString:"changingTextLayer"]) {
return layer;
}
}
Run Code Online (Sandbox Code Playgroud)
一旦找到它,您就可以更改文本:
titleLayer.string = @"Changed text";
Run Code Online (Sandbox Code Playgroud)
您现在要做的就是设置一个计时器,并每秒/您提供的时间间隔执行此操作,直到数组中有字符串为止。
您必须将其转换CALayer为CATextLayer.
祝你好运。
| 归档时间: |
|
| 查看次数: |
798 次 |
| 最近记录: |