6

次を使用してカスタム形状の影を描画しようとしていCALayerます:

#import <QuartzCore/QuartzCore.h>

@implementation ZKSBAppDelegate

@synthesize window = _window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSView *view = self.window.contentView;
    view.wantsLayer = YES;

    CALayer *shadowLayer = [CALayer layer];
    shadowLayer.shadowOpacity = 1;
    shadowLayer.shadowRadius = 1;
    shadowLayer.shadowOffset = NSMakeSize(0, 0);

    CGMutablePathRef shadowPath = CGPathCreateMutable();
    // setting the following rect's width to 100 fixes everything.
    // setting it to 130 screws the shadow even more.
    CGPathAddRect(shadowPath, NULL, CGRectMake(4, 0, 120, 48));
    CGPathAddRect(shadowPath, NULL, CGRectMake(120, 50, 116, 48));
    shadowLayer.shadowPath = shadowPath;
    CGPathRelease(shadowPath);

    [view.layer addSublayer:shadowLayer];
}
@end

Xcode で空の Cocoa プロジェクトを作成し、app.delegate の .m ファイルの内容を上記のコードに置き換えて、自分で試すことができます。

特定のシャドウ パス ジオメトリが原因のCALayerようです。

例えば:

CGPathAddRect(shadowPath, NULL, CGRectMake(4, 0, 100, 48));
CGPathAddRect(shadowPath, NULL, CGRectMake(120, 50, 116, 48));

これは完全に問題ないように見えます:

オーケーケース

ここで、最初の長方形を 20 ポイント広くします。

CGPathAddRect(shadowPath, NULL, CGRectMake(4, 0, 120, 48));
CGPathAddRect(shadowPath, NULL, CGRectMake(120, 50, 116, 48));

おっとケース

……もう、似合わない。プラス10ポイント:

CGPathAddRect(shadowPath, NULL, CGRectMake(4, 0, 130, 48));
CGPathAddRect(shadowPath, NULL, CGRectMake(120, 50, 116, 48));

WTFケース

それは明らかに間違っていますね。

問題は、何が起こっているのかということです。私のやり方が間違っているのでしょうか。これはバグだと思いますか? レポートを提出する必要がありますか?

4

1 に答える 1

3

はい、それはバグのように聞こえます。そうでない場合でも、バグ レポートを提出することで、Apple は対応し、有益な情報を提供するはずです。

于 2012-05-09T21:48:46.217 に答える