我在OS X中有一个CALayer,其放大倍率和放大倍率滤镜设置如下,但无论图层的大小如何,都可以使用放大倍率设置。
layer.magnificationFilter = kCAFilterNearest;
layer.minificationFilter = kCAFilterTrilinear;
三线性滤波在图层较小时起作用,但在放大时,图层将使用看起来像线性+最大的mipmap级别而不是最近的邻居来绘制。作为测试,我将放大滤镜设置为kCAFilterNearest,这使得它可以使用kCAFilterNearest渲染所有缩放级别 - 因此无论绘制图层的大小如何,似乎都在使用magnificationFilter。
我在iOS上尝试了相同的代码并且它按预期工作,所以这必须是OS X渲染的一些怪癖。
完整代码:
@implementation MipView
- (instancetype)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];
NSImage *image = [NSImage imageNamed:@"image"];
CALayer *layer = [CALayer layer];
layer.magnificationFilter = kCAFilterNearest;
layer.minificationFilter = kCAFilterTrilinear;
layer.frame = CGRectMake(0, 0, image.size.width, image.size.height);
layer.contents = (__bridge id _Nullable)[image CGImageForProposedRect:NULL context:nil hints:nil];
[self setLayer:[CALayer layer]];
[self setWantsLayer:YES];
[self.layer addSublayer:layer];
return self;
}
- (IBAction)slider:(id)sender {
self.layer.sublayerTransform = CATransform3DMakeScale([sender doubleValue], [sender doubleValue], 1);
}
@end
当放大图层时,有没有办法让Core Animation使用放大滤镜值?
答案 0 :(得分:0)
这是OS X中的一个错误。核心动画工程师似乎正在调查它,但是从maxOS Sierra beta 5开始修复它