2012-06-26 78 views
0

我的CALayers的分辨率出現問題,放大後看起來很模糊。我知道有很多關於它的帖子,但是在閱讀了很多帖子之後,我無法找到一個解決方案,但我很困惑。普通CALayer在放大時變得模糊

狀態: 該應用程序有一個UIViewController與UIView。在這個UIView下有一個CALayer,用CGPath定義它的形狀,添加爲[[self layer] addSublayer:myCALayer]。如果用戶點擊按鈕,有一定數量的其他CALayer被添加爲主CALayer的子層(myLayer - > [myLayer addSublayer:Layer])。我的情況和網上發現的帖子之間的區別是,我沒有UIImages,UIImageViews等,只有樸素和基本CALayers具有一定的backgroundColor。沒有UIScrollViews只有UIGestureRecognizers(tap,doubleTap,Pinch和Pan)。所有這些東西都很好。

問題: 當我放大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]; 
} 

任何提示將非常感激。謝謝。

回答

0

優化我的代碼之後,我所做的一項改進就是將「perfil」CALayer更改爲CAShapelayer。我想我與CALayer一起工作有些問題,但現在工作得很好。