我在OS X中有一个CALayer,它具有如下所示的放大倍率和放大滤镜设置,但是无论图层的大小如何,似乎都使用了放大倍率设置。

layer.magnificationFilter = kCAFilterNearest;
layer.minificationFilter = kCAFilterTrilinear;


当图层较小时,三线性过滤有效,但当图层放大时,将使用线性+最大mipmap级别(而不是最近的邻居)绘制图层。作为测试,我将放大滤镜设置为kCAFilterNearest,这使它使用kCAFilterNearest来针对所有比例级别进行渲染-因此,无论绘制图层的大小如何,似乎都使用了放大滤镜。

我在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使用放大滤镜值?

最佳答案

这是OS X中的错误。核心动画工程师似乎正在研究它,但截至maxOS Sierra beta 5为止尚未修复它。

关于objective-c - CALayer的magnificationFilter在OS X上被忽略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36504119/

10-13 06:24