Ich werde sagen, dass diese erste, iKiR Antwort mehr war als genug für mich. Ich kopierte den Code, wie es ist, und mit wenig Erfahrung von meiner Seite, ich konnte es mühelos funktioniert (auf UITableView
). Erstellen
- eine neue UIView Unterklasse, ich nenne es
MaskingView
- Import
QuartzCore
Rahmen!
- Fügen Sie den Code unten in der init. (
initWithCoder:
und/oder initWithFrame:
entsprechend)
- Fügen Sie die Ansicht hinzu, dass Sie die Opazität Feathering innerhalb der
MaskingView
anwenden möchten. (In Interface Builder, Benutzer-Editor -> Einbetten in -> Ansicht. Dann wählen Sie die Klasse der neuen Superview als)
- Geben Sie alle Kredit an iKiR, denn ich habe keine Ahnung, wie der Code funktioniert, aber es einfach funktioniert!
NOTES:
- Ich bin ein Universal-App zu entwickeln, und der folgende Code funktioniert, wie es auf beiden Geräten ist! (IPhone/iPad)
- Wenn Einbetten Bei der Verwendung von -> UIView wird die neue Ansicht ein wenig größer als der Subview sein. Sie müssen es genau auf die Unteransicht anpassen. Bevor Sie jedoch die Größe ändern, müssen Sie die Subviews für die Autoresize deaktivieren.
Der Code:
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;
Irgendwelche Ideen? Bitte... – iKiR