Если вы маскируете изображение JPEG, у которого нет альфа-канала, это произойдет (черный фон вместо прозрачного).
Поэтому перед маскировкой необходимо сделать что-то подобное:
CGImageRef imageNoAlpha = [UIImage imageNamed:@"noAlphaImage.jpg"].CGImage;
CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
CGFloat width = CGImageGetWidth(imageNoAlpha);
CGFloat height = CGImageGetHeight(imageNoAlpha);
CGContextRef ctxWithAlpha = CGBitmapContextCreate(nil, width, height, 8, 4*width, cs, kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(ctxWithAlpha, CGRectMake(0, 0, width, height), imageNoAlpha);
CGImageRef imageWithAlpha = CGBitmapContextCreateImage(ctxWithAlpha);
CGImageRef masked = CGImageCreateWithMask(imageWithAlpha, mask);
...
Обязательно выпустите созданные изображения, контекст и цветовое пространство ...