title: how can be add text by using UILabel instead of CATextLayer over a video
body: <p>I have created an application in which i have add text by using CATextLayer.but i want to add text by using UILabel and perform scaling and rotation . Is it possible to add a text by using UILabel over a video ? If yes, Please help me for getting this.</p>
  
  <p>My code for adding text by using CATextLayer is Here and it's working properly.</p>
  
  <pre><code> -(void)displayWatermarkInVideo
    {
  if (!self.videoAsset) {
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please Load a Video Asset First"
                                                     delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
      [alert show];
      return;
  }
  AVMutableComposition* mixComposition = [AVMutableComposition composition];
  
  AVMutableCompositionTrack *compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo  preferredTrackID:kCMPersistentTrackID_Invalid];
  AVAssetTrack *clipVideoTrack = [[self.videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
  [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, self.videoAsset.duration)
                                 ofTrack:clipVideoTrack
                                  atTime:kCMTimeZero error:nil];
  
  [compositionVideoTrack setPreferredTransform:[[[self.videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] preferredTransform]];
  
  
  CALayer *aLayer = [CALayer layer];
  aLayer.frame = CGRectMake(0, 0, 30, 30); //Needed for proper display. We are using the app icon (57x57). If you use 0,0 you will not see it
  aLayer.opacity = 0.75; //Feel free to alter the alpha here
  //Create layer with watermark text instead of image
  CGSize videoSize = [self.videoAsset naturalSize];
  CATextLayer *titleLayer = [CATextLayer layer];
  titleLayer.string = @"Text";
  titleLayer.font = (__bridge CFTypeRef)(@"Helvetica");
  titleLayer.fontSize = videoSize.height/6;
  //?? titleLayer.shadowOpacity = 0.5;
  titleLayer.alignmentMode = kCAAlignmentCenter;
  titleLayer.bounds = CGRectMake(0, 0, videoSize.width/6, videoSize.height/6); //You may need to adjust this for proper display
  //Sorts the layer in proper order
  titleLayer.frame = CGRectMake(10, 10, videoSize.width/6, videoSize.height/6);
  CALayer *parentLayer = [CALayer layer];
  CALayer *videoLayer = [CALayer layer];
  parentLayer.frame = CGRectMake(0, 0, videoSize.width, videoSize.height);
  videoLayer.frame = CGRectMake(0, 0, videoSize.width, videoSize.height);
  [parentLayer addSublayer:videoLayer];
  [parentLayer addSublayer:aLayer];
  [parentLayer addSublayer:titleLayer]; //ONLY IF WE ADDED TEXT
  //Create composition
  AVMutableVideoComposition* videoComp = [AVMutableVideoComposition videoComposition];
  videoComp.renderSize = videoSize;
  videoComp.frameDuration = CMTimeMake(1, 30);
  videoComp.animationTool = [AVVideoCompositionCoreAnimationTool      videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
  //Create instruction to insert layer
  AVMutableVideoCompositionInstruction *instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
  instruction.timeRange = CMTimeRangeMake(kCMTimeZero, [mixComposition duration]);
  AVAssetTrack *videoTrack = [[mixComposition tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
  AVMutableVideoCompositionLayerInstruction* layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoTrack];
  instruction.layerInstructions = [NSArray arrayWithObject:layerInstruction];
  videoComp.instructions = [NSArray arrayWithObject: instruction];
  
  NSString *destPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"NewwatermarkVideo.mp4"];
  NSURL *exportUrl = [NSURL fileURLWithPath:destPath];
  
  
  
  if ([[NSFileManager defaultManager] fileExistsAtPath:destPath])
  {
      [[NSFileManager defaultManager] removeItemAtPath:destPath error:nil];
  }
  
  
  
  AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition
                                                                    presetName:AVAssetExportPresetHighestQuality];
  exporter.outputURL=exportUrl;
  exporter.outputFileType = AVFileTypeQuickTimeMovie;
  exporter.shouldOptimizeForNetworkUse = YES;
  exporter.videoComposition = videoComp;
  [exporter exportAsynchronouslyWithCompletionHandler:^{
      dispatch_async(dispatch_get_main_queue(), ^{
          [self exportDidFinish:exporter];
      });
  }];
  }
  </code></pre>