Ваша проблема - фундаментальное заблуждение о том, как на самом деле работает drawRect:
.Каждый раз, когда вы рисуете что-то в текущем графическом контексте, все, что было там ранее, будет очищено (так что останется только backgroundColor
).
Поскольку вы рисуете только текущее касание (я) (touchesNeedingDrawing
пусто), под прямоугольником, который вы заполняете, нет ничего, что могло бы показать прозрачность изображения, которое вы рисуете, поэтому цвет фона просвечивает.
У вас есть два варианта решения этой проблемы:
1) Сохраняйте все штрихи, которые способствуют рисованию (не очищайте массив touchesNeedingDrawing
) и перерисовывайте их каждый раз - это будет легко, но довольно медленно.
2) Рисовать в какой-нибудь буфер (например, UIImage
, используя UIGraphicsBeginImageContext
и т. Д.).Каждый раз, когда ваш рисунок меняется, создайте новый буфер.Нарисуйте старый буфер в новый буфер и изображения для нового штриха поверх него.