UIColor per Code

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

  • UIColor per Code

    Ich hab mir grade einen abgebrochen ein UIColor Objekt zu erzeugen aus einem RGB Value. Bin schier verzweifelt, bis ich das hier gefunden habe. pegolon.wordpress.com/2008/11/…-with-just-one-rgb-value/ Mit dem Makro:

    Quellcode

    1. #define UIColorFromRGB(rgbValue) [UIColor \ colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
    2. green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
    3. blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
    kann mans ganz einfach machen.

    Quellcode

    1. UIColor myGreen = UIColorFromRGB(0x00FF00);
  • RE: UIColor per Code

    Original von MCDan
    Was gefällt Dir denn an den Methoden:

    + (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha
    - (UIColor *)initWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha

    nicht?


    Ich tippe auf die Tatsache, 0x00FF00 in 0.0 1.0 0.0 umrechnen zu müssen.
    Mag bei 0x00FF00 nicht so schlimm sein, 0xCEF012 hingegen wird spaßig. ;)
    «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
  • RE: UIColor per Code

    Original von Lucas de Vil
    Original von MCDan
    Was gefällt Dir denn an den Methoden:

    + (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha
    - (UIColor *)initWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha

    nicht?


    Ich tippe auf die Tatsache, 0x00FF00 in 0.0 1.0 0.0 umrechnen zu müssen.
    Mag bei 0x00FF00 nicht so schlimm sein, 0xCEF012 hingegen wird spaßig. ;)


    Gibt doch überall im Netz Umrechner und der Calculator von Apple kann glaub ich auch ganz gut mit HEX.
    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].
  • RE: UIColor per Code

    Original von Lucas de Vil
    Original von MCDan
    Was gefällt Dir denn an den Methoden:

    + (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha
    - (UIColor *)initWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha

    nicht?


    Ich tippe auf die Tatsache, 0x00FF00 in 0.0 1.0 0.0 umrechnen zu müssen.
    Mag bei 0x00FF00 nicht so schlimm sein, 0xCEF012 hingegen wird spaßig. ;)

    Woher stammen denn die Werte? CSS?

    Wieso baut man sich dann ein Makro, welches derlei Werte aus anderen Universen verarbeitet? Und wenn man das schon macht, weil es ein gewisser Standard ist, wieso verfällt man auf den Gdanken, das per Makro zu machen. Gibt es da nicht wirklich eine passende Technologie in Objective-C? Kategorien?

    Der Erfinder des Makros zeigt hier nicht, dass er Objective-C wirklich verstanden hat. (Okay, das ist übertrieben. Aber dies mit einem Makro zu machen, ist schon schwer an der Sprache vorbeigefrickelt.)
    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"?
  • RE: UIColor per Code

    Für Euch zum Hintergrund. Ich habe einen UIView, welcher in einem UIScrollview eingebettet ist. Wenn der Benutzer jetzt scrollt, erscheint teilweise der Hintergrund des Scrollviews. Das Ziel ist jetzt, die Hintergrundfarbe des UIView und des UIScrollView anzupassen, damit es wie ein Screen erscheint. Für den UIView kann ich die Farbe gleich im IB setzen. Den ScrollView erzeuge ich per Code, deswegen brauch ich da ne Methode. So. Jetzt gebt doch mal in Photoshop oder im Web die Farbwerte aus dem IB ein und ruft die Methoden des UIColor mit diesen Werten auf. Es ist mir nicht gelungen, dieselbe Farbe zu erzeugen. Ich habe alle möglichen RGB Profile getestet und es auch mit HUE versucht. Kein Erfolg. Das Makro klappte sofort und sah wie ein QuickWin aus. Wie macht man das mit Kategorien?
  • RE: UIColor per Code

    Original von kay
    Für Euch zum Hintergrund. Ich habe einen UIView, welcher in einem UIScrollview eingebettet ist. Wenn der Benutzer jetzt scrollt, erscheint teilweise der Hintergrund des Scrollviews. Das Ziel ist jetzt, die Hintergrundfarbe des UIView und des UIScrollView anzupassen, damit es wie ein Screen erscheint. Für den UIView kann ich die Farbe gleich im IB setzen. Den ScrollView erzeuge ich per Code, deswegen brauch ich da ne Methode. So. Jetzt gebt doch mal in Photoshop oder im Web die Farbwerte aus dem IB ein und ruft die Methoden des UIColor mit diesen Werten auf. Es ist mir nicht gelungen, dieselbe Farbe zu erzeugen. Ich habe alle möglichen RGB Profile getestet und es auch mit HUE versucht. Kein Erfolg. Das Makro brachte den schnellen Erfolg. Wie macht man das mit Kategorien?

    Das Makro macht nichts anderes a.s die einzelnen Bytes durch 255 zu dividieren, also auf den entsprechenden Bereich zu mappen. Das kann man auch von Hand.
    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"?
  • RE: UIColor per Code

    Original von kay
    Original von Tom9811Das Makro macht nichts anderes a.s die einzelnen Bytes durch 255 zu dividieren, also auf den entsprechenden Bereich zu mappen. Das kann man auch von Hand.
    Ich dachte das machen die UIColor Methoden?

    Die Color-Methoden gehen meist von einem Bereich von [0.0, 1.0] aus, weil dieser neutral ist. Wieso sollte man gerade einen Bereich von 0 bis 255 verwenden? Weil heutige Computer mit 8-Bit-Bytes arbeiten? Weil heutige Graohikkarten mit 24-Bit Farbtiefe arbeiten? Wie gesagt: Hat der ne 255 verschluckt?
    Original von kay
    Wieso muss ich das per Hand machen?

    Wieso musst du das Makro per Hand eintippen?
    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"?
  • Quellcode

    1. UIColor *myColor = [UIColor colorWithDeviceRed: 1.0 green: 1.0 blue: 1.0 alpha: 1.0];

    Ist Weiss. RGBA kannst du zwischen 0 - 1.0 setzen. Oft hast du die Farben halt als (pixel)array mit 4Byte, d.h. jeder Farbwert 1Byte (char). Die musst du dann eben in floats umwandeln float = intValue* (1/255) - das macht das Makro
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • RE: UIColor per Code

    Original von kay
    Original von Tom9811 Wieso musst du das Makro per Hand eintippen?
    Cut and Paste my friend! Jetzt mal ernsthaft. Ich kenn mich mit dem Gedöns nicht aus. Wie macht man das also per Code richtig?

    Es ist ja nicht verkehrt, Werte umzurechnen. Aber generell würde ich das wenn möglich außerhalb der Source machen.

    Wenn man es haben möchte, dann sollte man sich eine Kategorie schreiben, siehe oben.
    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 kay
    Original von kressevadder
    float floatValue = (float)intValue / 255.0f;

    ist besser
    Siehste! Und da bin ich ja fast schon beim Makro. Danke für die Tips. Ich werd mal versuchen das mit dem Tip von MCDan umzubasteln.

    Nein, bist du nicht. Das zeigt sich einfach:

    Quellcode

    1. int a = 0;
    2. NSLog( "%d", a );
    3. … = UIColorFromRGB( a++ );
    4. NSLog( "%d", a );

    Oder auch nur ein wenig gefährlicherer, aber wundersamer:

    Quellcode

    1. int a = 0;
    2. … = UIColorFromRGB( getMyColorFromWhereeverYouWant() );

    Wieso wird die Funktion dreimal aufgerufen?

    Makros haben Seiteneffekte, Seiteneffekte, Seiteneffekte.

    Schön dürfet – auch ungetestet– sein:

    Quellcode

    1. UIColorFromRGB( 0x010000 | 0x0000FF )

    Der letzte Teil des Makros expandiert dann zu:

    Quellcode

    1. blue:((float)(0x010000 | 0x0000FF & 0xFF))/255.0

    Da IIRC & stärker bindet als | wird daraus:

    Quellcode

    1. blue:((float)(0x010000 | 0xFF))/255.0

    und dann

    Quellcode

    1. blue:((float)(0x0100FF))/255.0

    also

    Quellcode

    1. blue:258.00392

    Was macht UIColor dann eigentlich?
    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"?