我的CALayers分辨率在放大后看起来很模糊。我知道有很多关于它的帖子但是,在阅读了很多帖子之后我还找不到解决方案而且我是对此感到困惑。
状况: 该应用程序有一个带UIView的UIViewController。在这个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 :(得分:0)
优化我的代码后,我所做的一项改进是将“perfil”CALayer更改为CAShapelayer。我想我在使用CALayer时遇到了一些问题,但现在效果非常好。