0

ズームインすると CALayers の解像度がぼやけて見えるという問題があります。それに関する投稿がたくさんあることは知っていますが、それらをたくさん読んだ後、まだ解決策を見つけることができず、混乱しています。 .

状況: アプリには、UIView を持つ UIViewController があります。この UIView の下には、[[self layer] addSublayer:myCALayer] として追加された形状を定義する CGPath を持つ CALayer があります。ユーザーがボタンをタップすると、特定の数の他の CALayer がサブレイヤーとしてメインの CALayer に追加されます (myLayer -> [myLayer addSublayer:Layer])。私のケースと Web で見つかった投稿との違いは、UIImages、UIImageViews などを持っておらず、特定の backgroundColor を持つ単純で基本的な CALayers しか持っていないことです。UIScrollViews はなく、UIGestureRecognizers (タップ、ダブルタップ、ピンチ、パン) のみです。これらはすべてうまく機能します。

問題: 拡大すると、CALayers がぼやけます。

問題の画像は次のとおりです。

そして、ここに私のコードがあります:

これは、UIView で定義されたメインの CALayer です。

- (id)initWithFrame:(CGRect)frame
{
    [super initWithFrame:frame]; 

    (…)

    perfil = [[CALayer alloc] init];
    perfilDelegate = [[perfilLayerDelegate alloc] init];
    [perfil setDelegate:perfilDelegate];
    [perfil setBounds:CGRectMake(0, 0, wideP, heigthP/2)];
    [perfil setPosition:CGPointMake(wideP/2, heigthP*3/4)];

    [perfil setShouldRasterize:TRUE];
    [perfil setRasterizationScale:[[perfil valueForKeyPath:@"transform.scale"] floatValue]];

    [[self layer] addSublayer:perfil];

    (…)
}

これらは、ユーザーがボタンをタップしたときに UIView で定義された他のサブレイヤーです。

for (int i=0; i<[numLayers count]; i++)
{
    CALayer *Layer = [[CALayer alloc] init];

    punt = [[numLayers objectAtIndex:i] CGPointValue];

    [Layer setBounds:CGRectMake(0.0, 0.0, wideL, heigthL)]; 

    [Layer setBorderWidth:2.0];
    UIColor *reddish = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.3];
    [Layer setBorderColor:[reddish CGColor]];
    [Layer setPosition:[[numLayers objectAtIndex:i] CGPointValue]];
    [Layer setCornerRadius:[Layer bounds].size.width/2];

    reddish = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.2];
    CGColorRef cgReddish = [reddish CGColor];
    [Layer setBackgroundColor:cgReddish];

    [Layer setShouldRasterize:YES];
    [Layer setRasterizationScale:[[perfil valueForKeyPath:@"transform.scale"] floatValue]];

    [perfil addSublayer:Layer];

    [Layer release];
}

どんなヒントでも大歓迎です。ありがとうございました。

4

1 に答える 1

0

コードを最適化した後、私が行った改善の 1 つは、「perfil」CALayer を CAShapelayer に変更することです。CALayer の操作に何か問題があったと思いますが、今では完全にうまく機能しています。

于 2012-07-24T10:29:00.477 に答える