ios - 自定义 CIKernel 和 iOS7

标签 ios objective-c core-image

我有一个支持同时运行 iOS 7 和 8 的设备的 iOS 项目(项目部署目标:7.0),我最近开始使用 iOS 8 中引入的新 API 实现自定义 CIKernel。

虽然代码在每个 iOS 8 设备上编译和运行都没有问题,但每次我尝试在 iOS 7 设备上运行它时都会收到此错误:

dyld: Symbol not found: _OBJC_CLASS_$_CIColorKernel
  Referenced from: /var/mobile/Applications/...
  Expected in: /System/Library/Frameworks/CoreImage.framework/CoreImage
 in /var/mobile/Applications/...

生成错误的代码是这样的:

kernel = [CIColorKernel kernelWithString:kernelStr];

kernelWithString: 方法是在 iOS8 中引入的,如 CIKernel.h 声明的那样:

__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0);

所以我的问题是:如何让应用程序在 iOS 7 和 8 设备上运行,并且只为 iOS 7 设备禁用我的自定义 CIKernel 功能?那可能吗?

请注意,我已将项目设置中的 CoreImage.framework 从“必需”更改为“可选”,并且该应用程序在 iOS7.0 设备上运行,但说实话感觉真的很糟糕。

我还尝试了预处理器命令:__IPHONE_OS_VERSION_MIN_REQUIRED__IPHONE_OS_VERSION_MAX_ALLOWED 但这些命令仅对编译时有用。

有什么线索吗?

最佳答案

尝试使用这个:

Class colorKernelClass = NSClassFromString(@"CIColorKernel");
kernel = [colorKernelClass kernelWithString:str];

关于ios - 自定义 CIKernel 和 iOS7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28057644/

相关文章:

ios - 如何使用新的 pencilkit api 注释 pdf?

ios - 使用 Gamecenter 实时多人游戏发送和接收数据需要多长时间?

iphone - 在应用程序运行时阻止 Iphone iOS 中的调用和短信

ios - 如何在 objective-c 中从谷歌驱动器下载jpg、png、pdf、doc.ppt、rtf等文件

ios - 如何在 Swift 中从字符串生成条形码?

ios - CIFilter在运行时确定inputKey参数类型

ios - 在 UIButton 上触发一个 Action ,触摸里面拖到外面然后松开手指

ios - 使用平移或其他手势时,如何将 UIimageView 保持在其他 uiimageview 之上

objective-c - 调用电话后返回我的应用程序

ios - 使用 CGImageCreate 调整图像大小以减少内存使用