Линейный градиент наложения с CoreGraphics - PullRequest
1 голос
/ 05 марта 2011

Я пытаюсь эмулировать эффект цветового оттенка от UITabBarItem.

Когда я рисую линейный градиент под углом, я получаю видимое смещение в средней части градиента, где два цвета встречаются в одном и том же месте. Слева UITabBarItem, справа мой градиент с видимым псевдонимом (степпинг):

gradient aliasing

Вот фрагмент кода:

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
CGContextRef c = UIGraphicsGetCurrentContext();

CGContextSaveGState(c);
CGContextScaleCTM(c, 1.0, -1.0);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();  
CGFloat components[16] = {1,1,1,1, 
                          109.0/255.0,175.0/255.0,246.0/255.0,1, 
                          31.0/255.0,133.0/255.0,242.0/255.0,1, 
                          143.0/255.0,194.0/255.0,248.0/255.0,1};
CGFloat locations[4] = {0.0, 0.62, 0.62, 1};
CGGradientRef colorGradient = 
      CGGradientCreateWithColorComponents(colorSpace, components, 
                                          locations, (size_t)4);
CGContextDrawLinearGradient(c, colorGradient, CGPointZero,
                            CGPointMake(size.width*1.0/3.9, -size.height),0);
CGGradientRelease(colorGradient);
CGColorSpaceRelease(colorSpace);
CGContextRestoreGState(c);

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return resultImage;

Что мне нужно изменить, чтобы получить плавный угловой градиент, как в UITabBarItem?

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Какое качество интерполяции установлено в вашем контексте? CGContextGetInterpolationQuality () / CGContextSetInterpolationQuality (). Попробуйте изменить это, если оно слишком низкое.

Если это не сработает, мне интересно, что произойдет, если вы нарисуете градиент по вертикали (0, Ymin) - (0, Ymax), но примените преобразование поворота к своему контексту ...

0 голосов
/ 05 марта 2011

В качестве текущего обходного пути я рисую градиент с двойным разрешением в изображение, а затем рисую изображение с исходными размерами. Масштабирование изображения, которое происходит, заботится о псевдонимах. На уровне пикселей результат не такой плавный, как в UITabBarItem, но, вероятно, используется изображение, созданное в Photoshop или что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...