CALayer in UIImage festhalten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Macoun 2019 - Frühbucherrabatt bis 26.7.2019

  • CALayer in UIImage festhalten

    Moin,

    ich würde gerne CALayer, die ich per self.layer addSubylayer: zu meinem View hinzufüge, im einem UIImage rendern/festhalten.

    Dafür habe ich folgende Methode implementiert.

    Quellcode

    1. - (UIImage *)takeImage {
    2. UIGraphicsBeginImageContext(self.frame.size);
    3. CGContextRef context = UIGraphicsGetCurrentContext();
    4. if (context) {
    5. [self.layer renderInContext:context];
    6. UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
    7. UIGraphicsEndImageContext();
    8. return snapshotImage;
    9. }
    10. return nil;
    11. }
    Alles anzeigen
    Habt ihr eine Idee, wieso ich ein absolut leeres Bild erhalte?
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • Mac & i Test Abo
  • Selber Code - Neues Problem

    Zusätzlich wird den verwendeten CAShapeLayers ein CATextLayer (bzw. eine subclass davon) hinzugefügt.

    C-Quellcode: RAPlanShape.mm

    1. _labelLayer = [RAPlanTitelLayer layer];
    2. _labelLayer.fontSize = 13.0;
    3. _labelLayer.string = @"Raum";
    4. _labelLayer.alignmentMode = kCAAlignmentCenter;
    5. _labelLayer.foregroundColor = [[UIColor blackColor] CGColor];
    6. // _labelLayer.backgroundColor = [[UIColor redColor] CGColor];
    7. _labelLayer.contentsScale = [UIScreen mainScreen].scale;
    8. [_layer addSublayer:_labelLayer];

    Die CATextLayer Subclass implementiert zusätzlich folgende Methode, um den text zu zentrieren.

    Quellcode

    1. // REF: http://lists.apple.com/archives/quartz-dev/2008/Aug/msg00016.html
    2. // CREDIT: David Hoerl - https://github.com/dhoerl
    3. // USAGE: To fix the vertical alignment issue that currently exists within the CATextLayer class. Change made to the yDiff calculation.
    4. - (void)drawInContext:(CGContextRef)ctx {
    5. double height = self.bounds.size.height;
    6. double fontSize = self.fontSize;
    7. double yDiff = (height - fontSize) / 2 - fontSize / 10;
    8. CGContextSaveGState(ctx);
    9. CGContextTranslateCTM(ctx, 0.0, yDiff);
    10. [super drawInContext:ctx];
    11. CGContextRestoreGState(ctx);
    12. }
    Alles anzeigen
    Meine Frage
    Wie kommt es, dass der Text im CATextLayer sowohl auf dem gerät, vor allem aber im späteren Screenshot enorm verpixelt und unscharf wirkt? Wie kann ich dem entgegen wirken?
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io