Я использую этот код для маскировки градиента с изображением.Но это очень медленно.
CGImageRef gradientMaskImage = CreateGradientImage(1, 500);
CGImageRef masked = CGImageCreateWithMask([[UIImage imageNamed:@"brooklyn_new.jpg"] CGImage], gradientMaskImage);
UIImage *result = [UIImage imageWithCGImage:masked];
CGImageRelease(gradientMaskImage);
CGImageRelease(masked);
return result;
А для CreateGradientImage:
CGImageRef CreateGradientImage(int pixelsWide, int pixelsHigh)
{
CGImageRef theCGImage = NULL;
// gradient is always black-white and the mask must be in the gray colorspace
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
// create the bitmap context
CGContextRef gradientBitmapContext = CGBitmapContextCreate(NULL, pixelsWide, pixelsHigh,
8, 0, colorSpace, kCGImageAlphaNone);
// define the start and end grayscale values (with the alpha, even though
// our bitmap context doesn't support alpha the gradient requires it)
CGFloat colors[] = {0.0, 1.0, 1.0, 1.0};
// create the CGGradient and then release the gray color space
CGGradientRef grayScaleGradient = CGGradientCreateWithColorComponents(colorSpace, colors, NULL, 2);
CGColorSpaceRelease(colorSpace);
// create the start and end points for the gradient vector (straight down)
CGPoint gradientStartPoint = CGPointZero;
CGPoint gradientEndPoint = CGPointMake(0, pixelsHigh);
// draw the gradient into the gray bitmap context
CGContextDrawLinearGradient(gradientBitmapContext, grayScaleGradient, gradientStartPoint,
gradientEndPoint, kCGGradientDrawsAfterEndLocation);
CGGradientRelease(grayScaleGradient);
// convert the context into a CGImageRef and release the context
theCGImage = CGBitmapContextCreateImage(gradientBitmapContext);
CGContextRelease(gradientBitmapContext);
// return the imageref containing the gradient
return theCGImage;
}
////
CGImageRef gradientMaskImage = CreateGradientImage(1, 500);
Здесь 500 будет переменной.Поэтому всякий раз, когда я вызываю эту функцию с переменной высотой, она перерисовывает маскированное изображение.Так что это должно быть очень очень быстро.
Как я могу сделать это быстрее?