【问题标题】:Plain CALayer become blurry when zooming in放大时普通的CALayer变得模糊
【发布时间】:2012-06-26 19:45:39
【问题描述】:

我的 CALayers 的分辨率有问题,放大后看起来很模糊。我知道有很多关于它的帖子,但是在阅读了很多帖子之后,我还没有找到解决方案,我对此感到困惑。

情况: 该应用程序有一个带有 UIView 的 UIViewController。在这个 UIView 下有一个 CALayer,用 CGPath 定义它的形状,添加为 [[self layer] addSublayer:myCALayer]。如果用户点击一个按钮,就会有一定数量的其他 CALayer 作为子层添加到主 CALayer (myLayer -> [myLayer addSublayer:Layer])。我的案例和网上找到的帖子的区别在于我没有 UIImages、UIImageViews 等,只有具有特定背景颜色的普通和基本的 CALayers。没有 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];
}

任何提示将不胜感激。谢谢。

【问题讨论】:

    标签: iphone image-processing zooming calayer blurry


    【解决方案1】:

    优化我的代码后,我所做的一项改进是将“perfil”CALayer 更改为 CAShapelayer。我想我在使用 CALayer 时出了点问题,但现在效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 2019-05-23
      • 1970-01-01
      • 2019-06-10
      相关资源
      最近更新 更多