当我使用CATransform3DRotate设置CALayer的transform属性时,图层被正确旋转.但是,图层的边缘是锯齿状的,没有消除锯齿.我读了几篇关于这个主题的帖子:
我试图通过在对角层上设置以下属性来结合他们的建议
CALayer* layer = myView.layer;
layer.shadowOpacity = 0.01;
layer.edgeAntialiasingMask = kCALayerTopEdge | kCALayerBottomEdge | kCALayerRightEdge | kCALayerLeftEdge;
layer.borderWidth = 1.0;
layer.borderColor = [UIColor clearColor].CGColor;
layer.backgroundColor = [UIColor greenColor].CGColor;
Run Code Online (Sandbox Code Playgroud)
我还覆盖了drawLayer:inContext:我的对角线层的方法以确保消除锯齿:
-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context
{
CGContextSetAllowsAntialiasing(context, true);
CGContextSetShouldAntialias(context, true);
CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor);
CGContextFillRect(context, self.bounds);
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
在WWPC 2014关于新Yosemite UI的一次谈话中,它表示要避免使用NSVisualEffectView蒙面图层.不幸的是,我的视图的图层确实有一个形状蒙版,因此其中的视觉效果视图具有丑陋的锯齿状边缘效果:

但是我知道必须以某种方式创建一个蒙面视觉效果视图,部分原因有两个:
NSVisualEffectView产生一个平滑的,反对称的蒙版(但需要在其后面有一个未屏蔽的背景,而不仅仅是一个未屏蔽的父视图)NSPopover并且NSMenu似乎能够实现随尺寸变化的平滑蒙版:

虽然它们使用的是否是可疑的NSVisualEffectView,而不是定制的模糊视图.
有什么方法可以实现这种不依赖于遮罩图像而是依赖于路径或形状层的平滑遮罩?
在ViewController的主NSView中,我使用重写了func drawRect(dirtyRect: NSRect)在主视图上实现圆角的方法NSBezierPath。用同样的方法,我还指定了主视图的渐变背景。
override func drawRect(dirtyRect: NSRect) {
let path: NSBezierPath = NSBezierPath(roundedRect: self.bounds, xRadius: 18.0, yRadius: 18.0)
path.addClip()
let gradient = NSGradient(startingColor: NSColor(hexColorCode: "#383838"), endingColor: NSColor(hexColorCode: "#222222"))
gradient.drawInRect(self.frame, angle: 90)
}
Run Code Online (Sandbox Code Playgroud)
下图说明了出现的问题:

该图显示了视图角之一。圆角的倒圆仅部分成功,因为仍然有一个白色圆角伸出到窗口的圆角之外。
如果有人有更好的方法设置窗口的拐角半径,我会接受这样的建议。我对此事进行了大量研究,但是这种解决方案似乎是最简单的。
非常感谢您提供有关如何解决此问题的建议。
macos ×2
nsview ×2
antialiasing ×1
calayer ×1
cocoa ×1
ios ×1
iphone ×1
objective-c ×1
osx-yosemite ×1
swift ×1