Xcode Label Feld auf Kopf stellen?

  • Original von below
    Wenn man den Text selbst zeichnet, ist es ganz einfach. Man muss nur die NSAffineTransformation oder CAAffineTransformation entsprechend setzen.

    Ob ein NSTextField das von Haus aus kann, weiss ich jetzt gerade nicht

    Alex


    Ein NSTextField kann das nicht. Jedenfalls nicht alleine. Es war doch mit der Grund, wieso Apple CA unbedingt auch in AppKit haben wollte. Sobald ein NSView/NSControl in irgendeiner Art und Weise rotiert wird, so verursacht dies Probleme. Das rotierte Control sieht dann komisch aus und reagiert auf Events ebenso komisch. Abhilfe schafft wie gesagt die Nutzung von Layerbacked Views/Controls. Damit ist das kein Problem mehr. Dazu gibt es auch ein tolles Beispiel von Apple, welches zeigt, wie layerbacked Views gedreht werden können und dennoch gut aussehen.

    Schaust du hier:
    developer.apple.com/samplecode…e_ref/doc/uid/DTS10004072

    In der Datei ViewLayout.m siehst du, wie Apple die Geometrie der einzelnen Views entsprechend affin transformiert.

    Hauptsächlich geschieht dies mit setFrameRotation: und setFrameOrigin:.

    Viel Spaß beim Ausprobieren.
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Original von Objcler
    Ein NSTextField kann das nicht. Jedenfalls nicht alleine.

    Ja, der "fieldEdtitor" gibt eine helfende Hand.

    Das wäre dann auch der richtige Adressat für eine Transformation, wenn man tatsächlich ein drehendes Textfeld über 'drawRect:' haben möchte: Einfach einem neuen Editor beibringen, wie Text gezeichnet werden soll, und dann dem Textfeld aufdrücken.

    Aber nur, wenn man es noch ohne Layer machen möchte.
    I would be embarrassed if they did not spy on me.
  • Original von Objcler
    Das geht mit Core Animation. Einfach setWantsLayer:YES aufrufen und drehen. Fertig. Das View sollte weiterhin ganz normal funktionieren.



    gibt mir jemand ne Hilfestellung ^^ich raff das nicht..... Hab jetzt nen Textfeld und nen button... ganz einfach... dreht sich das textfeld erst nach betätigung um? oder ist es von anfang an umgedreht?

    - (IBAction)flipButton:(id)sender
    {

    [textfield setWantsLayer:YES];
    }
    @end

    gibt irgendwo nen Tutorial zu core animation ? bin schon am suchen, vielleicht gehts so ja schneller :( Glaube ich will zu viel zu schnell auf einmal... bin leider ungeduldig

    DANKE

    Edit: scheint wohl noch ne nummer zu groß für mich zu sein
  • Mmh, jetzt hat mich das hier so wuschig gemacht, daß ich es einfach mal ausprobiert habe.

    So ein NSTextField als Label auf ein Window geworfen und ein Miniobjekt dazugebaut:

    Eine kleines Erwecken ...

    Quellcode

    1. - (void)awakeFromNib
    2. {
    3. [textfield rotateByAngle:180.0];
    4. [textfield setNeedsDisplay];
    5. [textfield setStringValue:@"Now I'm flipped"];
    6. }


    Das sieht bei mir ganz gut aus, allerdings ist mein Monitor nicht im Tisch eingebaut :)

    Hab' ich was nicht mitbekommen, denkt ihr zu kompliziert oder ich zu einfach ?

    Jetzt gehe ich doch erst mal duschen ...
    Tom
    [url=http://www.osxwerk.de]osXwerk[/url]
  • Original von tom
    Mmh, jetzt hat mich das hier so wuschig gemacht,

    Hmm, mich macht ja so etwas wuschig:
    express.de/nachrichten/region/…ineid=1234246353246&now=2

    Original von tomdaß ich es einfach mal ausprobiert habe.

    So ein NSTextField als Label auf ein Window geworfen und ein Miniobjekt dazugebaut:

    Eine kleines Erwecken ...

    Quellcode

    1. - (void)awakeFromNib
    2. {
    3. [textfield rotateByAngle:180.0];
    4. [textfield setNeedsDisplay];
    5. [textfield setStringValue:@"Now I'm flipped"];
    6. }


    Das sieht bei mir ganz gut aus, allerdings ist mein Monitor nicht im Tisch eingebaut :)

    Hab' ich was nicht mitbekommen, denkt ihr zu kompliziert oder ich zu einfach ?

    Jetzt gehe ich doch erst mal duschen ...

    Ich glaube, dass Objcler das so meinte: Wenn das layer-backed ist, muss man nur noch eine Rotation setzen. Aber vielleicht äußert er sich selbst.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von Amin Negm-Awad

    Hmm, mich macht ja so etwas wuschig:
    [URL]http://www.express.de/nachrichten/region/koeln/karneval/_artikel_1234246354050.html?[/quote]

    Mmh, da könnte man ja noch ein iPhone Bundes-Wobble-Programm mit machen ...[/url]
    Tom
    [url=http://www.osxwerk.de]osXwerk[/url]
  • Das ist eine uralte Methode von NSView, die wir alle übersehen haben, weil man sie selten nutzt.
    Die Drehung erfolgt um 0,0 des Koordinatensystems, immer. Man hat eine gute 3/4 Chance, das man nichts sieht nach der Drehung.
    I would be embarrassed if they did not spy on me.
  • Original von longW
    Das ist eine uralte Methode von NSView, die wir alle übersehen haben, weil man sie selten nutzt.
    Die Drehung erfolgt um 0,0 des Koordinatensystems, immer. Man hat eine gute 3/4 Chance, das man nichts sieht nach der Drehung.

    Ich glaube nicht, dass sie Objcler übersehen hat:
    Hauptsächlich geschieht dies mit setFrameRotation: und setFrameOrigin:.

    Wobei -rotateByAngel die Bounds verändert, also von der anderen Seite kommt, jedoch dasselbe macht: Frame-System gegen Bounds-System drehen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Bei Views, die layerbacked sind, spart man sich natürlich das setNeedsDisplay: Außerdem bin ich mir nicht sicher, ob rotierte, nicht layerbacked views, bei jedem Drehwinkel funktionieren. Ich habe da mal was gelesen. Müsste man mal testen.

    Amin: Wo ist deine tolle Signatur hin?
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Original von Objcler
    Bei Views, die layerbacked sind, spart man sich natürlich das setNeedsDisplay: Außerdem bin ich mir nicht sicher, ob rotierte, nicht layerbacked views, bei jedem Drehwinkel funktionieren. Ich habe da mal was gelesen. Müsste man mal testen.

    Amin: Wo ist deine tolle Signatur hin?

    Alles neu macht der Mai!

    Ich muss mir morgen noch was Neues überlegen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • wow....

    ich werds zu hause auch gleich mal ausprobieren.... vielen Dank schonmal für eure Hilfe, bin echt beeindruckt von dem Forum hier...

    Mal ne Frage nebenbei, hab mir Lektüre zu Xcode gekauft, ist das was ordentliches? Erscheinungsdatum ist zwar erst in März aber vielleicht können die die es drauf haben zur beschreibung des Buches was sagen *g*

    Xcode 3
  • Also, das mit dem drehen klappt wunderbar.... hab alles so gedreht bekommen wie ich es wollte... nur warum werden die Textfelder jetzt über den Timer nicht mehr aktualisiert.....
    Wenn ich die Felder nicht drehe werden sie alle ganz normal aktualisiert ;)

    warum?
  • Original von ego2k5
    Also, das mit dem drehen klappt wunderbar.... hab alles so gedreht bekommen wie ich es wollte... nur warum werden die Textfelder jetzt über den Timer nicht mehr aktualisiert.....
    Wenn ich die Felder nicht drehe werden sie alle ganz normal aktualisiert ;)

    warum?


    Hast du jetzt Core Animation zur Hilfe genommen oder nicht?
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Original von tom
    Mmh, jetzt hat mich das hier so wuschig gemacht, daß ich es einfach mal ausprobiert habe.

    So ein NSTextField als Label auf ein Window geworfen und ein Miniobjekt dazugebaut:

    Eine kleines Erwecken ...

    Quellcode

    1. - (void)awakeFromNib
    2. {
    3. [textfield rotateByAngle:180.0];
    4. }




    Hab das hier genommen um die felder entsprechend zu drehen.... Sie drehen sich zwar aber ich kann dem Feld über den Timer keinen Wert mehr zuweisen...... bei Core Animation bin ich nicht weiter gekommen... hab ich nicht ganz verstanden, wie gesagt, bin anfänger und das ding klang für mich ziemlich logisch ;) geht es damit nicht ?...
  • hmmmm denke mal das wird der wichtigste teil sein.... habe bis jetzt nur ein Feld gedreht "ausgabeBBLinks" (ausgabe Big Blind Linke Seite) Ist best. lächerlich für euch wie ich das gehandelt habe.....

    hab euch die *.m und *.h Dateien mal hochgeladen....
  • Original von ego2k5
    hmmmm denke mal das wird der wichtigste teil sein.... habe bis jetzt nur ein Feld gedreht "ausgabeBBLinks" (ausgabe Big Blind Linke Seite) Ist best. lächerlich für euch wie ich das gehandelt habe.....

    hab euch die *.m und *.h Dateien mal hochgeladen....


    Kannst du das Projekt hochladen bzw. ein minimales Beispiel? Das sind über 300 Zeilen Code, die du da hochgeladen hast.

    Es ist recht viel Aufwand diese 300 Zeilen durchzugehen. Ein kleines Beispiel - max. 30 Zeilen - die dein Problem verdeutlichen würden es viel einfacher machen zu helfen.
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].