Text in Rechteck zeichnen

  • Text in Rechteck zeichnen

    Hallo iOS-Entwickler,

    ich versuche mit Hilfe von Ray Wenderlichs Tutorial in das Erstellen von eigenen UI-Komponenten einzuarbeiten. Ich habe die Tutorial-Schritte in diesem Teil durchgespielt und das gewünschte Ergebnis auch bekommen. Nun soll das erarbeitete verändert und meinen Bedürfnissen angepasst werden.

    Ich möchte nun einen Text in ein Rechteck zeichnen. Dazu gehe ich so vor:

    Quellcode

    1. CGContextSetFillColorWithColor(ctx, self.slider.trackHighlightColor.CGColor);
    2. CGRect highlighttxt = CGRectMake(0, 10, 300, 20);
    3. CGContextFillRect(ctx, highlighttxt);
    4. NSMutableParagraphStyle* textStyle = NSMutableParagraphStyle.defaultParagraphStyle.mutableCopy;
    5. textStyle.alignment = NSTextAlignmentLeft;
    6. NSDictionary* textFontAttributes = @{NSFontAttributeName: [UIFont fontWithName: @"Helvetica" size: 15], NSForegroundColorAttributeName: UIColor.redColor, NSParagraphStyleAttributeName: textStyle};
    7. [@"Hello, World!" drawInRect: highlighttxt withAttributes: textFontAttributes];
    Ich bekomme mein Rechteck in der gewünschten Farbe, leider jedoch ohne Text.

    Der Hintergrund:
    Ich möchte eine Art Trackpad programmieren, dass auf links- und Rechtswischen reagiert. Dazu verwende ich dieses Tutorial (klick mich an) und möchte es dann passend abändern und ergänzen. Der erste Punkt wäre also, auf den Track "Swipe left or right" zu schreiben, damit der Nutzer auch weiß, was er mit der grauen Fläche anstellen soll.
    Ich habe leider ganz und gar keine Erfahrung mit Zeichnen, eventuell gehe ich die Sache auch falsch an. Ich bin für jeden Tipp dankbar.
    Dieser Post ist manuell erstellt und trotz Unterschrift gültig.
  • Falls mal jemand in dieselbe oder ähnliche Situation kommt, hier die Lösung (?) für mein Anliegen:

    Quellcode

    1. float padding = 0.0f;
    2. CTFontRef font = CTFontCreateWithName((__bridge CFStringRef) [UIFont systemFontOfSize:12].fontName, [UIFont systemFontOfSize:12].lineHeight, NULL);
    3. CGContextSetTextMatrix(ctx, CGAffineTransformIdentity);
    4. CGContextTranslateCTM(ctx, self.bounds.size.width/2-60, self.bounds.size.height+10);
    5. CGContextScaleCTM(ctx, 1.0, -1.0);
    6. CGRect textRect = CGRectMake(padding, self.frame.size.height - 100, 150, 100);
    7. CGMutablePathRef pathToRenderIn = CGPathCreateMutable();
    8. CGPathAddRect(pathToRenderIn, NULL, textRect);
    9. NSLog(@"textRect:%@",NSStringFromCGRect(self.bounds));
    10. NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:@"Swipe left or right"];
    11. CFAttributedStringSetAttribute((__bridge CFMutableAttributedStringRef) attrString, CFRangeMake(0, attrString.length), kCTFontAttributeName, font);
    12. CTFramesetterRef fs = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef) attrString);
    13. CTFrameRef frame = CTFramesetterCreateFrame(fs, CFRangeMake(0, attrString.length), pathToRenderIn, NULL);
    14. CTFrameDraw(frame, ctx);
    15. CFRelease(frame);
    16. CFRelease(pathToRenderIn);
    17. CFRelease(fs);
    Alles anzeigen
    Damit muss ich mich jetzt erstmal auseinandersetzen. Danke an gritsch für den Tipp CoreText.IMG_0011.jpg
    Dieser Post ist manuell erstellt und trotz Unterschrift gültig.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von buggy1984 ()

  • Ach was, danke Marco.


    Quellcode

    1. if ([_trackLayer respondsToSelector:@selector(setContentsScale:)]) {
    2. _trackLayer.contentsScale = [[UIScreen mainScreen]scale];
    3. }
    CALayer rendern nicht automatisch auf höhere Retina Auflösung. Und wieder steigt die Lernkurve.
    Vielen Dank für den schnellen und Hilfreichen Wink mit Pfosten!
    Dieser Post ist manuell erstellt und trotz Unterschrift gültig.