我正在创建一个简单的自定义
CIFilter
,它实现 CIKernel
来降低 alpha 值。
我的“AlphaFilter.h”:
@interface CIAlphaFilter: CIFilter {
CIImage *inputImage;
}
@property (retain, nonatomic) CIImage *inputImage;
@end
我的“AlphaFilter.m”:
#import "AlphaFilter.h"
@implementation CIAlphaFilter
@synthesize inputImage;
static CIKernel *alphaRemoveKernel = nil;
- (id)init {
if(alphaRemoveKernel == nil)
{
NSString *code = @"kernel vec4 darkToTransparent(sampler image){vec4 color = sample(image, samplerCoord(image));color.a =0.5;return color;}";
alphaRemoveKernel = [CIKernel kernelWithString:code];
}
return [super init];
}
- (CIImage *)outputImage
{
CISampler *src = [CISampler samplerWithImage: inputImage];
return [self apply: alphaRemoveKernel, src, nil]; // Error here
}
@end
返回
(CIImage *)outputImage
时,Xcode 给我一个错误:
“应用:”不可用:在 iOS 上不可用
谁能告诉我我犯了什么错误?我正在使用 Xcode 15.2。
根据文档:
- (nullable CIImage *)apply:(CIKernel *)k
arguments:(nullable NSArray *)args
options:(nullable NSDictionary<NSString *,id> *)dict NS_AVAILABLE_MAC(10_4);
- (nullable CIImage *)apply:(CIKernel *)k, ... NS_REQUIRES_NIL_TERMINATION NS_AVAILABLE_MAC(10_4) NS_SWIFT_UNAVAILABLE("");
有两种
apply
方法,但都标有NS_AVAILABLE_MAC
。所以它在iOS上不可用,你需要寻找其他方法。