Bruchdarstellung

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

  • Bruchdarstellung

    Hi,
    meine eigene App ist ja ein graphischer Taschenrechner. Zurzeit ist es so, dass z.B. "2" als "^2" dargestellt wird und die Brüche nur mit "/"-Zeichen dargestellt werden, anstatt in Bruchschreibweise untereinander (siehe Bild) geschriebenen werden. Wie kann ich es realisieren, dass in meinen TextFeld, "Hoch 2" und Brüche richtig angezeigt werden? Für "Hoch 2" würde ich es mit einen NSAttributedString lösen, wenn es nicht noch einfacher geht? Aber wie ich die Brüche darstellen und auch noch editierbar machen kann, habe ich kein Plan. Hat da jemand eine Idee? Das geht doch nicht mit eine NSAttributedString oder?

    Viele Grüße
    Nils

    EDIT: Sehe gerade falsches Forum. Sorry! Ist eine iPhone und iPad App.
    Dateien
  • Ich habe in einem Vortrag auf der Macoun gelernt, dass man dafür in die Tiefen von CoreText und Konsorten einsteigen muss.
    Eventuell hat sich das auch in den letzten Jahren vereinfacht, aber ich glaube nicht.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Marco Feltmann schrieb:

    Ich habe in einem Vortrag auf der Macoun gelernt, dass man dafür in die Tiefen von CoreText und Konsorten einsteigen muss.
    Eventuell hat sich das auch in den letzten Jahren vereinfacht, aber ich glaube nicht.

    Danke schon mal für den Tipp! Ich habe jetzt mal gegoogelt und wie es scheint ist TextKit seit iOS 7 der Nachfolger von CoreText. Dadurch dürfte es wahrscheinlich einfacher gehen aber weiß jemand, wo man sich da belesen kann? Ich habe bis jetzt gar keinen Ansatz und nicht mal einen Plan, wie ich vorgehen könnte.
  • macmoonshine schrieb:

    AppleDeveloper schrieb:

    Danke schon mal für den Tipp! Ich habe jetzt mal gegoogelt und wie es scheint ist TextKit seit iOS 7 der Nachfolger von CoreText

    Das ist ein Objective-C-API, das auf Core-Text basiert.

    Ah! Verstehe! Und kann man da irgendwas zur Mathematischen Darstellung finden? Ich habe mir schon das WWDC Video angeschaut aber bin in Bezug auf mein Problem genauso schlau wie vorher.
  • alexlaske schrieb:

    NSLayoutManager ist herrlich - da kämpfe ich auch gerade mit.. Könntest du nicht eine UIView-Subclass machen, in der du Zähler und Nenner als Labels oder TextFields machst?

    Das wäre eine Idee aber das soll ja in ein TextField rein. Das heißt, der User toucht auf den Bruch Button und schon soll im TextField so ein Bruch erscheinen. Und ein TextField in TextField ist irgendwie blöd und geht das überhaupt? Vor NSLayoutManager habe ich Respekt und es scheint mit etwas zu hoch.
  • TextField in TextField ist irgendwie blöd und geht das überhaupt?

    Ja. Sofern NSTextAttachment unterstützt wird (weiß ich nicht). Dann kann man eine beliebige Cell also statt einem Image wohl auch ein TextField dort darstellen das mit dem Text mitformatiert wird.
    Das erste WYSIWYG Programm das mit Formeln sehr gut umgehen konnte war ca. 1993 FrameMaker. Dort wurde aus der Bedienung klar dass eine Formel quasi als eine Buchstabenbox gehandhabt wird. So wie ein Bild das man in ein RTF einbettet. In die Box wird der Formel-Baum als geschachtelte Elemente reingerendert. Die Größe der Box wird dynamisch berechnet (bei Framemaker gab es eine Art "sizeToFit").
    D.h. Du brauchst zu jedem Formelknoten eine -size, eine -baseline und eine -draw-Methode. Dann kann z.B. ein Klammerknoten so hoch werden wie das größte eingeklammerte Element und so breit dass Platz für Klammern und Kind-Elemente bleibt. Und neben die geklammerten Kind-Elemente die Klammern links und rechts malen. Und ein Bruchstrich-Element kann den Zähler oben und den Nenner unten malen.
    Wenn Du das in das NSTextAttachment reinbringst sollte es auch in beliebigem Fließtext unterzubringen sein.
    NSLayoutManager oder CoreText braucht man dafür nicht.

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

  • Eine Möglichkeit wäre, das mit einem NSAttributedString und superscripting zu machen:

    Quellcode

    1. NSMutableDictionary *attributes = ...
    2. NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    3. style.alignment = NSTextAlignmentLeft;
    4. attributes[NSParagraphStyleAttributeName] = style;
    5. attributes[(id)kCTSuperscriptAttributeName] = @-1; // negative Werte für Nenner, positive für Zähler

    Dann kannst Du den Nenner mittels Kerning nach links schieben:

    Quellcode

    1. attributes[(id)kCTKernAttributeName] = @(-breite des Zählers/2)

    ich mache das so, um Taktarten darzustellen, was ja auch nur einem Bruch entspricht. Geht alles ohne subclassing oder custom drawing. Klappt auch noch mit iOS 6.

    Gruß, Markus
  • Bruchdarstellung

    Auch wenn es OT ist, ich praktiziere Featurebranching nicht, als Einzelkämpfer auch nicht nötig, allerdings gibt es auch das Argument, dass FB continuous integration erschwert und eigtl dessen Grundidee zuwider läuft (zu spätes mergen wird schwierig, Abhilfe in den feature branches durch regelmäßiges rebase möglich etc.). Hier ein Video mit Martin Fowler zu dem Thema:

    [media]http://m.youtube.com/watch?v=xzstASOvqNc[/media]
  • Ich komme mit seiner Argumentation nicht so ganz klar.

    Continuous Integration wird doch erst dann wichtig, wenn Dein via TDD fertig implementiertes Feature in den Master Branch geschoben wird.
    Im Allgemeinen sind bei mir die Merge Probleme weniger geworden, je mehr unterschiedliche Features auf unterschiedlichen Branches entwickelt werden.

    Dazu muss natürlich klar sein, dass besagte Features 'für sich' implementiert werden und kein Verändern der UI- oder anderer Elementen aus dem Branch stattfindet.
    Sobald man in einem Code herumhampelt (beispielsweise um sein eigenes View anzuzeigen), der mit an Sicherheit grenzender Wahrscheinlichkeit verändert werden kann (also absolut jede bereits existierende Datei), baut man sich potentielle Merge-Konflikte.
    Solange man diesen Code jedoch unverändert lässt bzw. die gemachten Änderungen aus dem Branch fern hält, wird es keine Probleme geben.

    Baut man also das Feature in einem völlig anderen Ordner, quasi als vollkommen neues Projekt autark vom eigentlichen System und verschmilzt dann die benötigten Dateien mit dem Master, dann passiert effektiv nichts, was Continuous Integration in irgendeiner Weise beeinflussen kann. Schließlich gab es die Dateien ja vorher nicht.
    (Natürlich könnte man einwerfen, 'Wenn jetzt noch ein Team seine Klasse genauso genannt hat wie…', doch darauf lässt sich kontern: 'Wenn ein anderes Feature ganz genau so heißt, dann habt ihr wohl was falsch gemacht.'
    Scheint übrigens ein beliebter Konter in der Softwareentwicklung zu sein…)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P