Кварцевые тени не рисуются правильно - PullRequest
2 голосов
/ 11 октября 2011

Итак, у меня есть это изображение для моего приложения, которое выглядит следующим образом:

enter image description here

Теперь это хорошо и все, но я пытаюсь уменьшить свою зависимостьна изображениях и вместо этого попробуйте нарисовать это динамически.

Хорошо, я обнаружил, что это изображение встроено в UIColor: (scrollViewTexturedBackgroundColor)

enter image description here

Выглядит немного светло, но мило.Мы добираемся туда.

Итак, теперь я переопределяю drawRect в подклассе UIView, чтобы затемнить немного.

-(void)drawRect:(CGRect)rect {
    [[UIColor colorWithWhite:0.0 alpha:0.4] setFill];
    UIRectFillUsingBlendMode(rect , kCGBlendModeDarken);
}

Эй, это не идеально, но достаточно близко.Я всегда могу настроить режим смешивания и цвет позже.Теперь самое сложное.Я не могу понять, как заставить тени рисовать правильно.Например, я попытался установить мою тень следующим образом:

enter image description here

CGContextSetShadowWithColor(ctx, CGSizeMake(0, 6), 5, [[UIColor blackColor]CGColor]);

Однако тень не отображается.Кроме того, я попытался сохранить состояние графики, применив тень, а затем восстановив ее, но когда я это сделал, появилась тень, но с обратным цветом (вероятно, из-за установленного режима наложения).Очевидно, это не то, на что я надеялся.

Есть идеи?

1 Ответ

2 голосов
/ 11 октября 2011

Тень отображается с чем-то, что нарисовано. Вы не можете нарисовать только тень без реального объекта, который ее отбрасывает. Если вы найдете способ сделать это, пожалуйста, дайте мне знать.

Я вижу на первом изображении эффект внутренней тени. Чтобы получить аналогичный результат, вам нужно нарисовать путь, который отбрасывает тень вокруг области.

enter image description here

На картинке красный путь - это путь Безье с обводкой 10 пикселей. Я оставил некоторый разрыв между изображением и путем, чтобы показать, что путь больше, чем фоновое изображение. Чтобы сгенерировать такой путь, вы можете использовать путь Безье с прямоугольником. Вставьте прямоугольник фонового рисунка в отрицательное значение, равное половине ширины обводки.

Если фактический контекст больше, чем картинка, обрежьте его прямоугольником, прежде чем рисовать путь.

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