有没有办法通过委托或事件监听器来监听目标c的dji-sdk中图像大小/宽高比的变化?
我的情况是,当通过DUXCameraSettingsController或通过运行dji go app的辅助遥控器更改宽高比时,我无法找到适应录像带的当前视口 .
我正在使用DJI-SDK-iOS 4.6.1,DJI-UXSDK-iOS 4.6.0和Mavic Pro无人机 .
您可以通过几种不同的方式来聆听宽高比变化事件 . 纯粹使用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
(DJICameraPhotoAspectRatio)newValue.unsignedIntegerValue
关于这种方法需要注意的一点是,在更新之前它不会返回aspectRatio的当前值,因此如果需要当前值,则需要在此之前执行getValueForKey .
第二种方式使用在UXSDK DUXObjectProtocol 中声明的协议,并且还将立即以及密钥更新时返回密钥的当前值 .
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 方法 . 调用变换值后将调用此方法,因此您可以在此处编写逻辑以更新用户界面或其他任何内容 .
- (void)update
6.)最后要做的是在你的类的初始化程序中,它符合你需要调用的DUXObjectProtocol:
[[DUXSDKModel defaultSDKModel] registerDependentKeys:[self dependentKeys] forObject:self];
并且在dealloc调用内部:
[[DUXSDKModel defaultSDKModel] unregisterDependentKeysForObject:self];
如果这有帮助,请告诉我!
1 回答
您可以通过几种不同的方式来聆听宽高比变化事件 . 纯粹使用SDK的第一种方法是执行以下操作:
1.)我们创建了我们想要听的密钥 .
DJIFlightControllerKey *aspectRatioKey = [DJICameraKey keyWithParam:DJICameraParamPhotoAspectRatio];
2.)从那里我们在密钥上注册一个监听器,如下所示:
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的值,如下所示:
5.)您也可以选择实现
- (void)update
方法 . 调用变换值后将调用此方法,因此您可以在此处编写逻辑以更新用户界面或其他任何内容 .6.)最后要做的是在你的类的初始化程序中,它符合你需要调用的DUXObjectProtocol:
[[DUXSDKModel defaultSDKModel] registerDependentKeys:[self dependentKeys] forObject:self];
并且在dealloc调用内部:
如果这有帮助,请告诉我!