Kombi aus NSString-Methoden und CGContext-Methoden

  • Kombi aus NSString-Methoden und CGContext-Methoden

    Hallo!

    Ich stecke gerade etwas fest. Ich möchte gern einen Button haben, den man drehen kann (einschließlich Text). Soweit ich das bisher überblicken kann, ist eine Drehung des UIButton "von Haus aus" nicht möglich. Daher male ich das Ding nun in drawLayer: selbst.

    Die grafischen Teile und auch die Drehung funktionieren wie gewünscht. Allerdings habe ich Probleme mit dem Text: Der Button soll sich in seiner Breite der Textlänge anpassen. Um die Länge des Textes zu ermitteln, verwende ich sizeWithFont: aus NSString, was natürlich in einem völlig anderen Kontext unterwegs ist, als meine Zeichenroutine.

    Das Problem ist, dass ich die sich ergebende Höhe des sich ergebenden Rechteckes nicht direkt in CGContextSelectFont() als Font Size verwenden kann. Die Schrift der folgenden Textausgabe ist immer zu groß.

    Wie kann ich wohl dieses Problem lösen? Ich vermute, dass das damit zusammen hängt, dass bei CGContextSelectFont() die Größe in "text space units" anzugeben ist.
  • Das funktioniert gut, Danke.

    Allerdings noch folgende Frage: Wenn ich - der Button ist eine Ableitung von UIControl - mit pointInside: gegen Klicks teste, verwende ich für CGRectContainsPoint() die frame-Property des Objeckts. Allerdings ist die offenbar/natürlich nicht transformiert.

    Kann ich irgendwo die transformierte Frame ableiten?

    Danke!!

    2:0
  • Es sind überlappende UIViews (bzw. UIControls) mit Freiform. Da muss schon jeder selbst schauen, ob in die aktive (= mit Grafik gefüllte) Fläche geklickt wurde. Das Thema hatten wir hier aber schon mal im letzten Jahr. Eigentlich prüfe ich gegen den Alphakanal des BIldes, an dieser Stelle hier kann ich aber aus Vereinfachungsgründen auch direkt gegen den (gedrehten) Frame prüfen - nicht gegen den Button, denn die aktivierbare Fläche ist kleiner als der Button.

    Eine andere Frage: Ich habe in der Doku zur frame-property gefunden, dass bei gefüllter transform-Property auf die bounds-/center-Properties zurückgegriffen werden sollte, um die tatsächliche Ausdehnung zu ermitteln. Nun habe ich in der bounds-Property als origin immer {0,0}. Das kann ich mir nicht recht erklären - enthält bounds nur die Größe und nicht den Ursprung? wenn dem so ist, muss ich den Ursprung dann mittels der center-Property selbst berechnen?
  • Ah. Ich muss mir also wie vermutet die frame-Koordinaten bei gesetztem transform-Property aus center und bounds ableiten. So ganz schlüssig ist mir zwar noch nicht, warum die origin bei {0,0} liegt, denn durch das Transformieren habe ich etwas anderes erwartet, aber ich teste das mal mit einer Kombi aus center/bounds.

    Danke!