Tengo un problema con las sombras de CALayer. Así es como estoy haciendo mi punto de vista:Añadir sombra a la capa provoca una apariencia de retina degradada
UIImage *screenshot = [SomeClass getScreenshot:mainView.view]; //full screen snap
CGFloat scale = [SomeClass getScreenScale]; // 1 or 2 for retina
CGFloat width = mainView.view.frame.size.width;
CGRect r1 = CGRectMake(0, 0, width*scale, 300*scale);
CGRect u1 = CGRectMake(0, 0, width, 300);
CGImageRef ref1 = CGImageCreateWithImageInRect([screenshot CGImage], r1);
l1 = [[UIButton alloc] initWithFrame:u1];
UIImage *img1 = [UIImage imageWithCGImage:ref1];
[l1 setBackgroundImage:img1 forState:UIControlStateNormal];
[l1 setAdjustsImageWhenHighlighted:NO];
CGImageRelease(ref1);
[mainView.view addSubview:l1];
Bien, entonces eso funciona bien. La imagen agregada es la resolución retina. Sin embargo, tan pronto como agrego una sombra a la capa, salta a la resolución estándar, haciendo que el botón parezca borroso.
l1.layer.shadowOffset = CGSizeMake(0, 0);
l1.layer.shadowRadius = 20;
l1.layer.shadowColor = [UIColor blackColor].CGColor;
l1.layer.shadowOpacity = 0.8f;
l1.layer.shouldRasterize = YES;
¿Hay alguna razón por la que agregar una sombra podría causar este problema?
Gracias por su sugerencia, pero parece que no funciona. Aún vuelve a la resolución estándar. :/ –
Lo probé yo mismo. La causa es que la representación incorrecta es l1.layer.shouldRasterize = YES; Necesita establecer l1.layer.rasterizationScale = scale también. – marcus
Ese fue el problema. ¡Gracias por ayudar! –