Я скажу это первый, ответ ИКИР был более чем достаточно для меня. Я скопировал код так, как есть, и с небольшим опытом со своей стороны я смог заставить его работать без усилий (на UITableView
).
- Создать новый UIView подкласс, я буду называть его
MaskingView
- импорт
QuartzCore
рамки!
- Вставьте код ниже в init. (
initWithCoder:
и/или)
- Добавьте представление, в котором вы хотите применить непрозрачность, в пределах
MaskingView
. (В интерфейсе Builder, Редактор пользователя -> Вставить In -> View. Затем выберите класс нового супервизора как MaskingView
)
- Отдайте должное iKiR, потому что я не знаю, как работает код, но это просто работает!
ПРИМЕЧАНИЯ:
- Я занимаюсь разработкой универсального приложения, а ниже код работает как на обоих устройствах! (iPhone/iPad)
- При использовании Embed In -> UIView новый вид будет немного больше, чем subview. Вы должны сделать так, чтобы он соответствовал подзону. Но прежде, чем изменить размер, убедитесь, что вы сняли флажок autoresize subviews.
Кодекс:
CALayer *viewLayer = [self layer];
CALayer* maskLayer = [CALayer layer];
maskLayer.bounds = viewLayer.bounds;
[maskLayer setPosition:CGPointMake(CGRectGetWidth(viewLayer.frame)/2.0, CGRectGetHeight(viewLayer.frame)/2.0)];
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate (NULL, viewLayer.bounds.size.width, viewLayer.bounds.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
CGFloat colors[] = {
0.5, 0.5, 0.5, 0.0, //BLACK
0.0, 0.0, 0.0, 1.0, //BLACK
};
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, NULL, sizeof(colors)/(sizeof(colors[0])*4));
CGColorSpaceRelease(colorSpace);
NSUInteger gradientH = 20;
NSUInteger gradientHPos = 0;
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0].CGColor);
CGContextFillRect(context, CGRectMake(0, gradientHPos + gradientH, CGRectGetWidth(maskLayer.frame), CGRectGetHeight(maskLayer.frame)));
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.0].CGColor);
CGContextFillRect(context, CGRectMake(0, 0, 320, gradientHPos));
CGContextDrawLinearGradient(context, gradient, CGPointMake(160, gradientHPos), CGPointMake(160, gradientHPos + gradientH), 0);
CGGradientRelease(gradient);
CGImageRef contextImage = CGBitmapContextCreateImage(context);
CGContextRelease(context);
[maskLayer setContents:(__bridge id)contextImage];
CGImageRelease (contextImage);
viewLayer.masksToBounds = YES;
viewLayer.mask = maskLayer;
Любые идеи? Пожалуйста... – iKiR