0

我正在一个应用程序中工作,并在其中进行视频录制。现在我要做的是捕获图像然后创建视频代码如下

- (void) drawRect:(CGRect)rect {
    NSDate* start = [NSDate date];

    CGContextRef context = [self createBitmapContextOfSize:self.frame.size];
    NSLog(@"context value %@",context);

    [self.layer renderInContext:context];

    CGImageRef cgImage = CGBitmapContextCreateImage(context);
    UIImage* background = [UIImage imageWithCGImage: cgImage];
    CGImageRelease(cgImage);
    self.currentScreen = background;


    if (_recording) {
        float millisElapsed = [[NSDate date] timeIntervalSinceDate:startedAt] * 1000.0;
        [self writeVideoFrameAtTime:CMTimeMake((int)millisElapsed, 1000)];

    }

      float processingSeconds = [[NSDate date] timeIntervalSinceDate:start];
      delayRemaining = (1.0 / self.frameRate) - processingSeconds;


      [self performSelectorInBackground:@selector(setNeedsDisplay) withObject:nil];

}

现在的问题是该方法是递归调用的,当停止录制时,它会给我 Exc_Bad_Access。

它在设备中的模拟器机器人崩溃中运行良好,我该如何解决这个问题?

4

1 回答 1

1

你不应该这样做drawRect:,覆盖的唯一原因drawRect:是做一些自定义绘图(你不是)。你也不应该setNeedsDisplay在后台线程上调用,这是一个只能从主线程调用的 GUI 方法。还取决于您的createBitmapContextOfSize:方法和环境,您可能需要释放位图上下文对象。

于 2013-02-16T15:00:28.390 回答