Hallo,
ich habe mit Hilfe zweier Layer in einer UIView eine Maskierung realisiert.
backgroundLayer erhält eine Textur
maskLayer erhält eine primitive geometrische Form
Wenn ich nun die Maske auf den BackgroundLayer lege erhalte ich zwar die gewünschte geometrische Form in ihrer Textur aber die Ränder sind unscharf - unabhängig davon ob ich nun eine Textur wähle oder eine Farbe für den BackgroundLayer.
Nachfolgend poste ich mal den Code:
Alles anzeigen
Das Ergebnis ist wirklich nicht zufridenstellen - man hat das gefühlt einen Schleier vor den Augen zu haben wenn man es sich anschaut.
Wie kann ich das besser umsetzen?
Oder was könnte die Ursache der Kantenunschärfe sein?
Vielen Danke für eure Hilfe
ich habe mit Hilfe zweier Layer in einer UIView eine Maskierung realisiert.
backgroundLayer erhält eine Textur
maskLayer erhält eine primitive geometrische Form
Wenn ich nun die Maske auf den BackgroundLayer lege erhalte ich zwar die gewünschte geometrische Form in ihrer Textur aber die Ränder sind unscharf - unabhängig davon ob ich nun eine Textur wähle oder eine Farbe für den BackgroundLayer.
Nachfolgend poste ich mal den Code:
PHP-Quellcode
- - (id)initWithFrame:(CGRect)frame {
- if ((self = [super initWithFrame:frame])) {
- UIImage *image = TEXTUR;
- // Initialize layers
- backgroundLayer = [[CALayer layer] retain];
- backgroundLayer.frame =
- CGRectMake(-(image.size.width - self.bounds.size.width) / 2.f,
- -(image.size.width - self.bounds.size.width) / 2.f,
- image.size.width,
- image.size.width);
- maskLayer = [[CALayer layer] retain];
- maskLayer.frame =
- CGRectMake((image.size.width - self.bounds.size.width) / 2.f,
- (image.size.width - self.bounds.size.width) / 2.f,
- self.bounds.size.width,
- self.bounds.size.height);
- // Create mask bitmap
- maskBitmapImage = [self createMaskBitmapImage];
- [self setMaskLayerContents];
- CGImageRef markerImage = image.CGImage;
- backgroundLayer.contents = (id)markerImage;
- [backgroundLayer setMask:maskLayer]; // Maskierung
- [self.layer addSublayer:backgroundLayer];
- }
- return self;
- }
- - (CGContextRef) createMaskBitmapImage {
- CGRect theBounds = self.bounds;
- CGFloat theRadius = CGRectGetWidth(theBounds) / 2.0;
- theBounds.size.width = 28;
- theBounds.size.height = 28;
- theBounds.origin.x = theRadius - (theBounds.size.width / 2.0);
- theBounds.origin.y = 24.;
- UIGraphicsBeginImageContext(self.bounds.size);
- CGContextRef theContext = UIGraphicsGetCurrentContext();
- CGContextSetFillColorWithColor(theContext, [UIColor colorWithWhite:1.0f alpha:1.0f].CGColor);
- CGContextSetLineWidth(theContext, 3.0);
- CGContextStrokeEllipseInRect(theContext, theBounds); // Scheibe
- CGContextSetShouldAntialias(theContext, YES);
- CGContextRetain(theContext);
- UIGraphicsEndImageContext();
- return theContext;
- }
- - (void) setMaskLayerContents {
- CGImageRef maskImage = CGBitmapContextCreateImage(maskBitmapImage);
- maskLayer.contents = (id)maskImage;
- [maskLayer needsDisplay];
- CGImageRelease(maskImage);
- }
Das Ergebnis ist wirklich nicht zufridenstellen - man hat das gefühlt einen Schleier vor den Augen zu haben wenn man es sich anschaut.
Wie kann ich das besser umsetzen?
Oder was könnte die Ursache der Kantenunschärfe sein?
Vielen Danke für eure Hilfe
