有没有办法通过委托或事件监听器来监听objective c的dji-sdk中图像大小/宽高比的变化?
我的情况是,当通过DUXCameraSettingsController或通过运行dji go应用程序的辅助遥控器更改纵横比时,我无法找到适合当前视频源的视窗。
我使用的是DJI-SDK-iOS 4.6.1、DJI-UXSDK-iOS 4.6.0和Mavic Pro无人机。
发布于 2018-08-11 02:04:00
你可以通过几种不同的方式来监听宽高比改变的事件。第一种完全使用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.)在实现中,您现在必须实现两个方法:
- (nonnull NSArray <__kindof DJIKey *> *)dependentKeys
- (void)transformValue:(nonnull DUXSDKModelValue *)value forKey:(nonnull __kindof DJIKey *)key;
3.)在dependedKeys内部,您可以返回一个包含要更新的任何键的数组,因此您可以返回:
return @[[DJICameraKey keyWithParam:DJICameraParamPhotoAspectRatio]];
4.)在aspectRatio的内部,当它像这样更新时,你可以得到它的值:
if ([key.param isEqualToString: DJICameraParamPhotoAspectRatio]) {
self.aspectRatio = (DJICameraPhotoAspectRatio)[value unsignedIntegerValue];
}5.)您也可以选择实现- (void)update方法。此方法将在调用transform value之后调用,因此在这里,您可以编写逻辑来更新用户界面或其他任何东西。
6.)要做的最后一件事是在您的类的初始化器中,它符合您需要调用的DUXObjectProtocol:
[[DUXSDKModel defaultSDKModel] registerDependentKeys:[self dependentKeys] forObject:self];
和dealloc调用的内部:
[[DUXSDKModel defaultSDKModel] unregisterDependentKeysForObject:self];如果这有帮助,请告诉我!
https://stackoverflow.com/questions/51782879
复制相似问题