iPhone用のCALayer描画で奇妙な問題が発生しています。私は "気泡"を表すサブレイヤをたくさん追加するルートレイヤを持っています。最終結果は、次のようなものに見えることになっている:CALayerとCGGradientRefアンチエイリアス?
http://www.expensivedna.com/IMG_0018.PNG http://www.expensivedna.com/IMG_0018.PNG
問題を、私は、アンチエイリアス(泡のジャギーを気づか)に層を得るように見えることができないということです。次のようにバブルのCALayerのためdrawInContextを上書き私のコードは次のようになります。今
- (void)drawInContext:(CGContextRef)theContext{
CGContextSetAllowsAntialiasing(theContext, true);
CGContextSetShouldAntialias(theContext, true);
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };
CGFloat components[8] = { 1.0, 1.0, 1.0, 0.5, // Start color
1.0, 1.0, 1.0, 0.0 }; // End color
CGColorSpaceRef rgbColorspace = CGColorSpaceCreateDeviceRGB();
CGGradientRef glossGradient =
CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations);
CGPoint topCenter = CGPointMake(25, 20);
CGPoint midCenter = CGPointMake(25, 25);
CGContextDrawRadialGradient(theContext, glossGradient, midCenter, 20, topCenter, 10, kCGGradientDrawsAfterEndLocation);
}
本当に奇妙なこと、私は少しに描画コードを変更した場合、次のようにのみ、通常の赤い丸を描くことである:
http://www.expensivedna.com/IMG_0017.PNG http://www.expensivedna.com/IMG_0017.PNG
:- (void)drawInContext:(CGContextRef)theContext{
CGContextSetAllowsAntialiasing(theContext, true);
CGContextSetShouldAntialias(theContext, true);
CGContextSetFillColorWithColor(theContext, [UIColor redColor].CGColor);
CGContextFillEllipseInRect(theContext, CGRectMake(0, 0, 40,40));
}
すべてがアンチエイリアスOKに思えます
私はこの一見奇妙な行動を把握できないようです。アンチエイリアス勾配とノーマルサークルとの違いがありませんか?
ありがとうございます。
先端:完全にここにジャギーを除去するために1ポイント私の四角形をインセットしなければなりませんでした。 – mattorb