Ios 当变量值更改时,是否执行方法的一部分?

Ios 当变量值更改时,是否执行方法的一部分?,ios,objective-c,swift,sceneview,Ios,Objective C,Swift,Sceneview,我正在将一些正在工作的swift代码转换为Objective-C,将SceneView渲染为m4v视频,并且渲染处理方法有一个返回语句,该语句仅在满足条件时执行 swift代码如下: func renderScene() { self.videoRenderer.delegate = self var options = VideoRendererOptions() options.sceneDuration = self.rotationDuration *

我正在将一些正在工作的swift代码转换为Objective-C,将SceneView渲染为m4v视频,并且渲染处理方法有一个返回语句,该语句仅在满足条件时执行

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)
        }
    )
}
-(void)recordPressed{
    isRecording = !isRecording;
    if (isRecording) {
        [self renderScene];
    }
}
此swift代码正在工作,并在满足until中的条件后返回(self.rotations>=self.totalRotations)

我的Objective-C代码反映了这段代码,但由于某种原因,直到中的部分没有被触发。在这种情况下,函数应该基于until块中的布尔值返回

-(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的值,并基于该值调用渲染函数。详情如下:

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)
        }
    )
}
-(void)recordPressed{
    isRecording = !isRecording;
    if (isRecording) {
        [self renderScene];
    }
}
如果您有任何帮助,我将不胜感激。对于最后一个括号的格式设置,我很抱歉,我似乎无法正确使用它


谢谢

为什么Objective-C代码与Swift代码如此不同?使用不同的选项,直到块完全不同。这些选项是相同的,只是它们在不同语言中的创建和访问方式不同。而且,我不明白这些街区有什么不同。是的,它们看起来不同,但这是基于语言的语法。但我可能错了,我才是问这个的人,所以就这样。不。在Swift代码中,
until
块比较
self.rotations>=self.totalRotations
。Objective-C代码只返回
!isRecording
。这是两种完全不同的支票,选项也不同。在Objective-C代码中,您没有设置
场景设置
。哎呀,我应该解释一下,逻辑的不同方面基本上是由需求决定的。swift版本将通过将数字或3d立方体旋转与设定的整数进行比较来确定停止时间,而我的只是基于按钮按下。为什么Objective-C代码与swift代码如此不同?使用不同的选项,直到块完全不同。这些选项是相同的,只是它们在不同语言中的创建和访问方式不同。而且,我不明白这些街区有什么不同。是的,它们看起来不同,但这是基于语言的语法。但我可能错了,我才是问这个的人,所以就这样。不。在Swift代码中,
until
块比较
self.rotations>=self.totalRotations
。Objective-C代码只返回
!isRecording
。这是两种完全不同的支票,选项也不同。在Objective-C代码中,您没有设置
场景设置
。哎呀,我应该解释一下,逻辑的不同方面基本上是由需求决定的。swift版本将通过将数字或3d立方体旋转与设定的整数进行比较来确定停止时间,而我的版本仅基于按键。