Я думаю, что часть, которую вы пропустили, это раздел PaintView:
- (BOOL) initContext:(CGSize)size {
int bitmapByteCount;
int bitmapBytesPerRow;
// Declare the number of bytes per row. Each pixel in the bitmap in this
// example is represented by 4 bytes; 8 bits each of red, green, blue, and
// alpha.
bitmapBytesPerRow = (size.width * 4);
bitmapByteCount = (bitmapBytesPerRow * size.height);
// Allocate memory for image data. This is the destination in memory
// where any drawing to the bitmap context will be rendered.
cacheBitmap = malloc( bitmapByteCount );
if (cacheBitmap == NULL){
return NO;
}
cacheContext = CGBitmapContextCreate (cacheBitmap, size.width, size.height, 8, bitmapBytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipFirst);
return YES;
}
Это создает единственный контекст, который он называет кешем, к которому обращаются все последующие касания. В представлении drawRect:
он просто копирует кэш в вывод.
Один из предоставляемых флагов - kCGImageAlphaNoneSkipFirst
- указывает, что в кэшированном контексте нет альфа-канала. Поэтому, когда он нарисован, фон не будет виден независимо от каких-либо других факторов; черный цвет получается из cacheContext так же, как если бы вы рисовали черным пальцем.
Итак, что вы действительно хотите сделать, это заполнить cacheContext белым, прежде чем начать. Вы можете сделать это, установив массив cacheBitmap, поскольку вы явно указали контексту, где хранить его данные, или можете использовать подходящий CGContextFillRect
для cacheContext.