CoreGraphics zeichnet bestimmte Elemente nicht

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

  • CoreGraphics zeichnet bestimmte Elemente nicht

    [attention greenhorn] Hallo,

    ich fange gerade erst an mit objective-c und arbeite mich zur Zeit durch dieses Werk hier:
    openbook.galileocomputing.de/a…phone_und_ipad/index.html

    In Kapitel 3 soll nun ein kleiner Wecker mit Hilfe von CoreGraphics programmiert werden.
    Dazu wird eine Ellipse gezeichnet und anschließend sollen die einzelnen Punkte und Striche für die Minuten und Stunden außen rum gezeichnet werden.
    Und genau da liegt mein Problem, die werden im Simulator nicht angezeigt. Ich habe über Log Ausgaben geschaut ob er durch die Schleife durchläuft was er sauber 60 mal macht. Dennoch wird keins der Elemente angezeigt.
    Nachdem mein eigener Code nicht funktioniert hat habe ich den von Github zu diesem Buch genommen, allerdings funktioniert der auch nicht, es tritt das selbe Problem auf und ich finde keine Lösung dazu.
    Ist bestimmt ganz auffällig und ich bin einfach zu blöd es zu finden

    Hier die Methode dazu:

    Quellcode

    1. - (void)drawRect:(CGRect)inRectangle {
    2. CGContextRef theContext = UIGraphicsGetCurrentContext();
    3. CGRect theBounds = self.bounds;
    4. CGFloat theRadius = CGRectGetWidth(theBounds) / 2.0;
    5. CGContextSaveGState(theContext);
    6. CGContextSetRGBFillColor(theContext, 1.0, 1.0, 1.0, 1.0);
    7. CGContextAddEllipseInRect(theContext, theBounds);
    8. CGContextFillPath(theContext);
    9. CGContextAddEllipseInRect(theContext, theBounds);
    10. CGContextClip(theContext);
    11. if([self respondsToSelector:@selector(tintColor)]) {
    12. UIColor *theColor = self.tintColor;
    13. CGContextSetStrokeColorWithColor(theContext, theColor.CGColor);
    14. CGContextSetFillColorWithColor(theContext, theColor.CGColor);
    15. }
    16. else {
    17. CGContextSetRGBStrokeColor(theContext, 0.25, 0.25, 0.25, 1.0);
    18. CGContextSetRGBFillColor(theContext, 0.25, 0.25, 0.25, 1.0);
    19. }
    20. CGContextSetLineWidth(theContext, theRadius / 20.0);
    21. CGContextSetLineCap(theContext, kCGLineCapRound);
    22. for(NSInteger i = 0; i < 60; ++i) {
    23. CGFloat theAngle = i * M_PI / 30.0;
    24. if(i % 5 == 0) {
    25. CGFloat theInnerRadius = theRadius * (i % 15 == 0 ? 0.7 : 0.8);
    26. CGPoint theInnerPoint = [self pointWithRadius:theInnerRadius angle:theAngle];
    27. CGPoint theOuterPoint = [self pointWithRadius:theRadius angle:theAngle];
    28. CGContextMoveToPoint(theContext, theInnerPoint.x, theInnerPoint.y);
    29. CGContextAddLineToPoint(theContext, theOuterPoint.x, theOuterPoint.y);
    30. CGContextStrokePath(theContext);
    31. }
    32. else {
    33. CGPoint thePoint = [self pointWithRadius:theRadius * 0.95 angle:theAngle];
    34. CGContextAddArc(theContext,thePoint.x, thePoint.y, theRadius / 40.0, 0.0, 2 * M_PI, YES);
    35. CGContextFillPath(theContext);
    36. }
    37. }
    38. [self drawClockHands];
    39. CGContextRestoreGState(theContext);
    40. }
    Alles anzeigen

    [/attention greenhorn]
  • Die Klasse ist der View zugewiesen. Die Ellipse die im ersten Teil des Codes erzeugt wird, wird im Simulator ja auch angezeigt, nur die Punkte und Striche für Minuten und Stunden nicht.
    Das habe ich geprüft und die Methode wird aufgerufen und er läuft auch die 60 mal durch die Schleife zum erzeugen der Punkte und Striche.
  • gritsch schrieb:

    hab mir den code nicht genau angeschaut und es fehlen auch werte um ihn zu analysieren.

    kandidaten sind aber immer:
    - transparent farbe?
    - linewidth?
    - berechnungen?
    - transformationen?

    setze einfach mal konstanten für alle genannten werte ein.


    Transparent ist es nicht, das hatte ich schon überprüft.
    Die Berechnung sollte auch richtig sein, das habe ich auch schon geprüft, außerdem ist das ja ein Beispiel aus dem Buch, da sollten die ja passen.

    macmoonshine schrieb:

    Hast du mal die Tint-Color des Clockviews geprüft?

    Ja habe ich, habe die Farbe inzwischen aber manuell auf schwarz gesetzt das ändert nichts.
  • Du hast zwei Fehler in pointWithRadius:angle: ('+' anstatt '*'):

    Quellcode

    1. - (CGPoint)pointWithRadius:(CGFloat)inRadius angle:(CGFloat)inAngle {
    2. CGPoint theCenter = [self midPoint];
    3. return CGPointMake(theCenter.x + inRadius * sin(inAngle), theCenter.y - inRadius * cos(inAngle));
    4. }


    BTW: Kannst du das nächste mal bitte die Forenfunktion für den Upload verwenden?
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Du hast zwei Fehler in pointWithRadius:angle: ('+' anstatt '*'):

    Quellcode

    1. - (CGPoint)pointWithRadius:(CGFloat)inRadius angle:(CGFloat)inAngle {
    2. CGPoint theCenter = [self midPoint];
    3. return CGPointMake(theCenter.x + inRadius * sin(inAngle), theCenter.y - inRadius * cos(inAngle));
    4. }


    BTW: Kannst du das nächste mal bitte die Forenfunktion für den Upload verwenden?


    :cursing: hab schon damit gerechnet das irgend etwas dummes der Fehler ist, und tada.
    Danke für die Hilfe, da hätte ich mich noch Tage dumm und dämlich nach gesucht.

    Sry, nicht dran gedacht, nutze ich natürlich das nächste mal.

    Danke an alle ;)
  • Chronisch schrieb:

    macmoonshine schrieb:

    Du hast zwei Fehler in pointWithRadius:angle: ('+' anstatt '*'):

    Quellcode

    1. - (CGPoint)pointWithRadius:(CGFloat)inRadius angle:(CGFloat)inAngle {
    2. CGPoint theCenter = [self midPoint];
    3. return CGPointMake(theCenter.x + inRadius * sin(inAngle), theCenter.y - inRadius * cos(inAngle));
    4. }


    BTW: Kannst du das nächste mal bitte die Forenfunktion für den Upload verwenden?


    :cursing: hab schon damit gerechnet das irgend etwas dummes der Fehler ist, und tada.
    Danke für die Hilfe, da hätte ich mich noch Tage dumm und dämlich nach gesucht.

    Sry, nicht dran gedacht, nutze ich natürlich das nächste mal.

    Danke an alle ;)


    hättest du konstanten eingetragen, wie von mir geraten, dann wärs dir aufgefallen.