我有一个UIImageView(全帧和矩形),我正在用CGAffineTransform旋转.UIImageView的UIImage填充整个帧.旋转和绘制图像时,边缘会出现明显的锯齿状.有什么我可以做的让它看起来更好吗?显然没有背景消除锯齿.
当我使用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)
我错过了什么?
我们已经让Reiner Knizia的钱出现了几个月了.它做得很好,所以我们一直在更新它,因为时间允许.然而,有一件事继续让我烦恼.我从来没有能够正确地将我的分层卡片用于消除别名.
这是一个示例:
直线放置的卡非常干净,但每当它们成角度时,卡周围的黑线会变得锯齿状.我试过这个,取决于艺术品隐含的两条线和通过drawRect:绘制的线,它们都做同样的事情.我已经尝试过edgeAntiAliasingMask,据我所知,它没有做任何事情.我已经为子层设置为NO和YES尝试了maskToBounds.
现在我的卡被设置为CALayer,前面和后面都有子CALayers,另外还有一些其他的东西,比如闪电面具和变暗的面具.这是代码的一些片段:
CArdLayer *theCardLayer = [CArdLayer layer];
theCardLayer.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge;
theCardLayer.front = [CALayer layer];
theCardLayer.front.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge;
theCardLayer.front.bounds = theCardLayer.bounds;
theCardLayer.front.masksToBounds = YES;
theCardLayer.front.contents = (id)[cardDrawing CGImage];
[theCardLayer addSublayer:theCardLayer.front];
Run Code Online (Sandbox Code Playgroud)
等......
关于如何使卡实际上是反别名的任何想法?