2016-04-08 12 views
2

Ich habe einen CALayer in OS X, dessen Vergrößerungs- und Vergrößerungsfilter wie unten beschrieben eingestellt sind. Die Vergrößerungseinstellung scheint jedoch unabhängig von der Schichtgröße zu verwendet zu werden.CALayers VergrößerungFilter wird unter OS X ignoriert

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

Die trilineare Filterung funktioniert, wenn die Schicht klein ist, aber wenn es vergrößert wird, wird die Schicht gezogen mit dem, was aussieht wie linear + die größte Mipmapstufe, statt nächster Nachbarn. Als Test habe ich den Vergrößerungsfilter auf kCAFilterNearest eingestellt, was bewirkt, dass er mit kCAFilterNearest für alle Skalierungsebenen gerendert wird - so scheint es, dass der Vergrößerungsfilter ungeachtet der Größe der Ebene verwendet wird, die gezeichnet wird.

Ich habe diesen Code auf iOS versucht und es hat wie erwartet funktioniert, also muss dies eine Eigenart von OS X Rendering sein.

vollständiger Code:

@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 

Gibt es eine Möglichkeit Core Animation verwenden, um die Vergrößerung Filterwert zu erhalten, wenn die Schicht vergrößert wird?

Antwort

0

Dies ist ein Fehler in OS X. Die Kern-Animationsingenieure scheinen sich damit zu beschäftigen, aber haben es nicht als von maxOS Sierra Beta 5

behoben