Часть метода выполняется при изменении значения переменной?

Я перевожу некоторый рабочий быстрый код в Objective-C, который визуализирует SceneView в видео m4v, а метод обработки рендеринга имеет оператор return, который выполняется только при выполнении условия.

Код Swift выглядит следующим образом:

func renderScene() {    
    self.videoRenderer.delegate = self
    var options = VideoRendererOptions()
    options.sceneDuration = self.rotationDuration * 
    TimeInterval(self.totalRotations)
    options.videoSize = CGSize(width: 1280, height: 720)
    options.fps = 60

    let startTime = Date()
    self.videoRenderer.render(
    scene: arView.scene,
    withOptions: options,
    until: {
        print(self.rotations, self.totalRotations)
        return self.rotations >= self.totalRotations
    },
    andThen: {
        outputPath in

        print(
            String(format:"Finished render in time: %.2fs", startTime.timeIntervalSinceNow * -1)
        )

        PhotosUtil.saveVideo(atPath: outputPath)

        let alert = UIAlertController(title: "Done", message: "A new video has been added to the Camera Roll", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        self.present(alert, animated: true)
        }
    )
}

Этот быстрый код работает и возвращает, как только условие в до будет выполнено (self.rotations >= self.totalRotations).

Мой код Objective C отражает этот код, но по какой-то причине раздел в до не запускается. В этом случае функция должна возвращать, основываясь на логическом значении в блоке till.

-(void)renderScene{
    videoRenderer.delegate = self;
    struct VideoRendererOptions options;
    options.videoSize = CGSizeMake(1280, 720);
    options.fps = 60;

    NSDate *startTime = [NSDate date];
    [videoRenderer render:_sceneView.scene withOptions:options until:^BOOL{
        return !isRecording;
    } andThen:^(NSString * outputPath) {
        NSLog(@"%@", [NSString stringWithFormat:@"Finished render time in %.2fs", ([startTime timeIntervalSinceNow] * - 1)]);
        [PhotoUtil saveVideoAtPath:outputPath];
        [PSIAlertUtility showAlertTitle:@"Video Saved" message:@"Video has been added to your camera roll yo"];
    }];}

У меня также есть метод, который изменяет значение isRecording и вызывает функцию рендеринга на основе этого значения. Это выглядит следующим образом:

-(void)recordPressed{
    isRecording = !isRecording;
    if (isRecording) {
        [self renderScene];
    }
}

Был бы признателен за любую помощь, и я извиняюсь за последнее форматирование скобки, кажется, не могу понять это правильно.

Спасибо

0 ответов

Другие вопросы по тегам