首页 文章

有没有办法在dji sdk中监听宽高比的变化?

提问于
浏览
0

有没有办法通过委托或事件监听器来监听目标c的dji-sdk中图像大小/宽高比的变化?

我的情况是,当通过DUXCameraSettingsController或通过运行dji go app的辅助遥控器更改宽高比时,我无法找到适应录像带的当前视口 .

我正在使用DJI-SDK-iOS 4.6.1,DJI-UXSDK-iOS 4.6.0和Mavic Pro无人机 .

1 回答

  • 4

    您可以通过几种不同的方式来聆听宽高比变化事件 . 纯粹使用SDK的第一种方法是执行以下操作:

    1.)我们创建了我们想要听的密钥 .

    DJIFlightControllerKey *aspectRatioKey = [DJICameraKey keyWithParam:DJICameraParamPhotoAspectRatio];

    2.)从那里我们在密钥上注册一个监听器,如下所示:

    [[DJISDKManager keyManager] startListeningForChangesOnKey: aspectRatioKey withListener:self andUpdateBlock:^(DJIKeyedValue * _Nullable oldValue, DJIKeyedValue * _Nullable newValue) { }];
    

    3.)您可以使用以下命令在更新块中获取新的宽高比: (DJICameraPhotoAspectRatio)newValue.unsignedIntegerValue

    关于这种方法需要注意的一点是,在更新之前它不会返回aspectRatio的当前值,因此如果需要当前值,则需要在此之前执行getValueForKey .

    第二种方式使用在UXSDK DUXObjectProtocol 中声明的协议,并且还将立即以及密钥更新时返回密钥的当前值 .

    1.)让您想要接收更新的类符合DUXObjectProtocol .

    2.)在实现中,您现在必须实现2个方法:

    - (nonnull NSArray <__kindof DJIKey *> *)dependentKeys

    - (void)transformValue:(nonnull DUXSDKModelValue *)value forKey:(nonnull __kindof DJIKey *)key;

    3.)在dependedKeys内部,您将返回要获取更新的任何键的数组,因此您可以返回:

    return @[[DJICameraKey keyWithParam:DJICameraParamPhotoAspectRatio]];

    4.)transformValue内部:ForKey:你可以在更新时得到aspectRatio的值,如下所示:

    if ([key.param isEqualToString: DJICameraParamPhotoAspectRatio]) {
        self.aspectRatio = (DJICameraPhotoAspectRatio)[value unsignedIntegerValue];
    }
    

    5.)您也可以选择实现 - (void)update 方法 . 调用变换值后将调用此方法,因此您可以在此处编写逻辑以更新用户界面或其他任何内容 .

    6.)最后要做的是在你的类的初始化程序中,它符合你需要调用的DUXObjectProtocol:

    [[DUXSDKModel defaultSDKModel] registerDependentKeys:[self dependentKeys] forObject:self];

    并且在dealloc调用内部:

    [[DUXSDKModel defaultSDKModel] unregisterDependentKeysForObject:self];
    

    如果这有帮助,请告诉我!

相关问题