您可以通过几种不同的方式来监听宽高比更改事件。纯粹使用 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,也会立即返回key的当前值以及key更新的时候。
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];
如果这有帮助,请告诉我!