16 декабря 2010 г.

Градиент на UINavigationBar

Так уж захотелось заказчику, что б на фон компоненты UINavigationBar плавно перетекал из одного цвета в другой. Решение было найдено довольно быстро.

Будем модифицировать метод drawRect: компоненты UINavigationBar

  1. - (void) drawRect:(CGRect) rect
  2. {
  3. // подготовка контекста для рисования
  4. CGContextRef context = UIGraphicsGetCurrentContext();
  5. CGFloat locations[2] = { 0.0, 1.0 };
  6. CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
  7. // создаем и рисуем градиент
  8. CGFloat components[8] = COLOR_COMPONENTS;
  9. CGGradientRef gradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, 2);
  10. CGContextDrawLinearGradient(context, gradient, CGPointMake(0, 0), CGPointMake(0,self.frame.size.height), 0);
  11. CGGradientRelease(gradient);
  12. CGColorSpaceRelease(myColorspace);
  13. // верхнюю линию компоненты делаем белой
  14. CGContextSetRGBStrokeColor(context, 1, 1, 1, 1.0);
  15. CGContextMoveToPoint(context, 0, 0);
  16. CGContextAddLineToPoint(context, self.frame.size.width, 0);
  17. CGContextStrokePath(context);
  18. // нижнюю линию закрашиваем черным цветом
  19. CGContextSetRGBStrokeColor(context, 0, 0, 0, 1.0);
  20. CGContextMoveToPoint(context, 0, self.frame.size.height);
  21. CGContextAddLineToPoint(context, self.frame.size.width, self.frame.size.height);
  22. CGContextStrokePath(context);
  23. }


Пример можно скачать с github

2 комментария:

  1. Спасибо, Derand! Удачи в Новом Году! Харлан (iKandl)

    ОтветитьУдалить
  2. 2Harlan
    И вам всего хорошего в Новом Году! С наступающим!

    ОтветитьУдалить