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 に答える