Touch, Animation, UIImage

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

  • Touch, Animation, UIImage

    Hallo,

    ich habe ein Rädchen (UIImage) mit etwa 170 * 170 Pixel Größe. Wenn man das Rädchen dreht, dann soll sich parallel zum Drehen sich ein Text ändern.
    Abhängig von der Gradanzahl (360°/ 8 Anzahl) habe ich mir dabei gedacht.

    Ich weiß bisher, dass ich den Single Touch nehmen muss. (besser gesagt er soll abhängig von der Fingerbewegung sein. Etwa in Uhrzeiger)
    Und eine Animation für das Rädchen soll dann noch stattfinden.

    => Man soll also das Rädchen drehen können (mit dem Finger) und der Text soll sich gleichzeitig ändern.

    Ich weiß aber noch nicht genau nach was ich googlen soll oder wie ich es realisieren soll.

    Core Animation und TouchEvent?

    Gruß

    Mani
    lernen, lernen, lernen :)
  • Du machst eine eigene Klasse z.B. MyWheel abgeleitet von UIView. Dort überschreibt du die MEthoden touchesBegan touchesMoved und touchesEnded oder so ähnlich. Wenn Du in den Docs nach diesen Methoden suchst solltestr du genug Lesestoff für die nächsten 2-3 Tage haben

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Das kannst Du sehr schön über ein Control machen. Ich beschreibe so ein Control auch im Buch. Dafür musst Du allerdings ein bisschen lesen: openbook.galileocomputing.de/a…08-4274-8b17-625b0208638b

    Wenn Du die Drehung mit der Fingerbewegung machst, brauchst Du in der Regel keine Animationen, weil die Events schon kleinteilig genug sind. Animationen stören da eher.
    „Meine Komplikation hatte eine Komplikation.“
  • Also ich hab mal die Apple Dokumentation ein bisschen angelesen und die touchesMoved Methode hilft mir da sehr gut =D.
    Mein Rad dreht sich schon ^^
    Zwar bei jeder Bewegung des Fingers um 3 Grad aber auch nur im Uhrzeigersinn.

    Ich werd mal dein Link durchlesen.

    Danke @Thalius @macmoonshine

    btw: Hast du das Buch geschrieben? Wenn ja Respekt^^
    lernen, lernen, lernen :)
  • Hallo @macmoonshine !

    Habe das Buch vor wenigen Tagen von Amazon bekommen, herzliche Gratulation und bitte, bitte schreibe noch viele Bücher ! Ich habe fast alle Bücher über Objective C, I-Phone und I-Pad Programmierung ( ca. 30 Stk. ), aber keines hat mir so viel weiter geholfen wie dieses.

    DANKE und nochmals herzlichen Glückwunsch !!
  • Ich hätte noch eine Frage.
    Meine Animation die durch ein Touchevent ausgeführt wird funktioniert bereits.
    Hab ein einfaches Problem, aber ich steh auf dem Schlauch...

    Quellcode

    1. NSInteger count;
    2. NSInteger add = 1;
    3. count = count + add;
    4. if (count == 5) {
    5. count = 0;
    6. NSLog(@"5 erreicht!");
    7. }
    8. NSLog(@"dreht gerade!");
    9. NSLog(@"Interner Zähler: %i", count);


    Dieses Codefragment wird bei jedem touchesMoved Aufruf aufgerufen.
    Er zählt mir aber so hoch:

    Quellcode

    1. 2011-11-14 12:47:20.949 radTest[604:707] dreht gerade!
    2. 2011-11-14 12:47:20.955 radTest[604:707] Interner Zähler: 1828257
    3. 2011-11-14 12:47:20.963 radTest[604:707] dreht gerade!
    4. 2011-11-14 12:47:20.968 radTest[604:707] Interner Zähler: 1899713
    5. 2011-11-14 12:47:20.982 radTest[604:707] dreht gerade!
    6. 2011-11-14 12:47:20.987 radTest[604:707] Interner Zähler: 1828257
    7. 2011-11-14 12:47:20.996 radTest[604:707] dreht gerade!
    8. 2011-11-14 12:47:21.000 radTest[604:707] Interner Zähler: 1902353
    9. 2011-11-14 12:47:21.013 radTest[604:707] dreht gerade!
    10. 2011-11-14 12:47:21.017 radTest[604:707] Interner Zähler: 1899713
    11. 2011-11-14 12:47:21.029 radTest[604:707] dreht gerade!
    12. 2011-11-14 12:47:21.032 radTest[604:707] Interner Zähler: 1828257
    13. 2011-11-14 12:47:21.045 radTest[604:707] dreht gerade!
    14. 2011-11-14 12:47:21.048 radTest[604:707] Interner Zähler: 1902353
    15. 2011-11-14 12:47:21.061 radTest[604:707] dreht gerade!
    16. 2011-11-14 12:47:21.064 radTest[604:707] Interner Zähler: 1828257
    17. 2011-11-14 12:47:21.080 radTest[604:707] dreht gerade!
    18. 2011-11-14 12:47:21.083 radTest[604:707] Interner Zähler: 1899713
    19. 2011-11-14 12:47:21.093 radTest[604:707] dreht gerade!
    20. 2011-11-14 12:47:21.099 radTest[604:707] Interner Zähler: 1902353
    21. 2011-11-14 12:47:21.107 radTest[604:707] dreht gerade!
    22. 2011-11-14 12:47:21.114 radTest[604:707] Interner Zähler: 1828257
    23. 2011-11-14 12:47:21.122 radTest[604:707] dreht gerade!
    24. 2011-11-14 12:47:21.129 radTest[604:707] Interner Zähler: 1902353
    25. 2011-11-14 12:47:21.138 radTest[604:707] dreht gerade!
    26. 2011-11-14 12:47:21.145 radTest[604:707] Interner Zähler: 1899713
    27. 2011-11-14 12:47:21.154 radTest[604:707] dreht gerade!
    28. 2011-11-14 12:47:21.161 radTest[604:707] Interner Zähler: 1828257
    29. 2011-11-14 12:47:21.170 radTest[604:707] dreht gerade!
    30. 2011-11-14 12:47:21.174 radTest[604:707] Interner Zähler: 1902353
    31. 2011-11-14 12:47:21.186 radTest[604:707] dreht gerade!
    32. 2011-11-14 12:47:21.189 radTest[604:707] Interner Zähler: 1828257
    33. 2011-11-14 12:47:21.205 radTest[604:707] dreht gerade!
    34. 2011-11-14 12:47:21.213 radTest[604:707] Interner Zähler: 1899713
    35. 2011-11-14 12:47:21.221 radTest[604:707] dreht gerade!
    36. 2011-11-14 12:47:21.228 radTest[604:707] Interner Zähler: 1902353
    37. 2011-11-14 12:47:21.237 radTest[604:707] dreht gerade!
    38. 2011-11-14 12:47:21.244 radTest[604:707] Interner Zähler: 1828257
    39. 2011-11-14 12:47:21.253 radTest[604:707] dreht gerade!
    40. 2011-11-14 12:47:21.257 radTest[604:707] Interner Zähler: 1902353
    41. 2011-11-14 12:47:21.268 radTest[604:707] dreht gerade!
    42. 2011-11-14 12:47:21.272 radTest[604:707] Interner Zähler: 1899713
    43. 2011-11-14 12:47:21.283 radTest[604:707] dreht gerade!
    44. 2011-11-14 12:47:21.287 radTest[604:707] Interner Zähler: 1828257
    45. 2011-11-14 12:47:21.299 radTest[604:707] dreht gerade!
    46. 2011-11-14 12:47:21.302 radTest[604:707] Interner Zähler: 1902353
    47. 2011-11-14 12:47:21.315 radTest[604:707] dreht gerade!
    48. 2011-11-14 12:47:21.317 radTest[604:707] Interner Zähler: 1828257
    49. 2011-11-14 12:47:21.331 radTest[604:707] dreht gerade!
    50. 2011-11-14 12:47:21.334 radTest[604:707] Interner Zähler: 1899713
    51. 2011-11-14 12:47:21.347 radTest[604:707] dreht gerade!
    52. 2011-11-14 12:47:21.350 radTest[604:707] Interner Zähler: 1902353
    53. 2011-11-14 12:47:21.363 radTest[604:707] dreht gerade!
    54. 2011-11-14 12:47:21.366 radTest[604:707] Interner Zähler: 1828257
    55. 2011-11-14 12:47:21.382 radTest[604:707] dreht gerade!
    56. 2011-11-14 12:47:21.385 radTest[604:707] Interner Zähler: 1902353
    57. 2011-11-14 12:47:21.397 radTest[604:707] dreht gerade!
    58. 2011-11-14 12:47:21.401 radTest[604:707] Interner Zähler: 1899713
    59. 2011-11-14 12:47:21.412 radTest[604:707] dreht gerade!
    60. 2011-11-14 12:47:21.416 radTest[604:707] Interner Zähler: 1828257
    61. 2011-11-14 12:47:21.432 radTest[604:707] dreht gerade!
    62. 2011-11-14 12:47:21.435 radTest[604:707] Interner Zähler: 1902353
    63. 2011-11-14 12:47:21.445 radTest[604:707] dreht gerade!
    64. 2011-11-14 12:47:21.450 radTest[604:707] Interner Zähler: 1828257
    65. 2011-11-14 12:47:21.462 radTest[604:707] dreht gerade!
    66. 2011-11-14 12:47:21.466 radTest[604:707] Interner Zähler: 1899713
    67. 2011-11-14 12:47:21.477 radTest[604:707] dreht gerade!
    68. 2011-11-14 12:47:21.480 radTest[604:707] Interner Zähler: 1902353
    Alles anzeigen


    Ich hab bei der Deklaration diesesmal aufgepasst xD
    Entweder

    NSInteger blabla; oder int blabla;
    Gibt er mir da trotzdem die Speicheradresse aus?
    Wenn ich ihm aber eine 4 zuweise gibt er mir auch die 4 aus.

    Gruß
    lernen, lernen, lernen :)
  • Du musst das Hochzählen wahrscheinlich vom Drehwinkel abhängig machen. Die Variable count enthält zu Beginn einen zufälligen Wert, wenn Du sie als lokale Variable deklarierst.

    Außerdem ist die Verwendung des Divisionsrestes sicherer als die If-Abfrage:

    Quellcode

    1. count = (count + add) % 5;
    „Meine Komplikation hatte eine Komplikation.“
  • Super vielen Dank.

    Der Zähler ist nur eine von mir eingesetze Möglichkeit abzufragen wie oft die Methode touchesMoved augerufen worden ist.
    Ich möchte nach einer Drehbewegung den nächsten Text anzeigen lassen. Zum Beispiel nach 45 ° den Text 1 und nach 90 ° den Text 2.
    Ich dachte mir, da ja bei der Drehbewegung die Methode touchesMoved ausgeführt wird (öfters) frage ich einfach die Anzahl ab.
    Erreicht der eingesetzte Zähler 5 wird es zunächst wieder auf 0 gesetzt und dann holt er mir den Text auf den Screen.

    Habe ich überkreuzt gedacht? Oder geht es VIEL einfacher?

    =D
    lernen, lernen, lernen :)
  • Danke.

    ich habe meinen Zähler @public deklariert, wieso kann ich es trotz #import ".h" von einer anderen Klasse nicht zugreifen?
    Das Problem besteht auch, wenn ich die Winkelberechnung nehme, da es ein CustomRecognizer ist und nicht in der gleichen .m Datei ist.

    hm...
    lernen, lernen, lernen :)
  • Ich habe gerade diese Referenz angeschaut:
    UIRotateGestureRecognizer

    Bei mir handelt es sich um einen custom GestureRecognizer. Aber im Prinzip ist der auch so aufgebaut, nur der zweite Finger wird simuliert.

    Ich hab in der Dokumentation jedoch keinen Vermerk gefunden, wie man rausfinden kann, in welche Richtung man dreht. (im oder gegen den Uhrzeigersinn)

    Das ist für mich essentiell. Er soll, wenn er in Richtung Uhrzeigersinn gedreht wird eine Methode ausführen, im anderen Fall die andere Methode ausführen.

    Weiß jemand Bescheid?
    lernen, lernen, lernen :)

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

  • Danke nochmal für den Ratschlag. Hab gefühlte 6 Stunden gesucht aber nicht wirklich gefunden, wie ich den Winkel berechnen kann.
    (Gleich Feierabend)
    Ich brauche doch wenigstens ein paar Parameter, die mein ImageView zurückliefert, damit ich überhaupt eine Formel aufstellen kann =(
    lernen, lernen, lernen :)
  • Ich würde eine Ableitung von UIControl machen und die folgenden Methoden überschreiben:

    Quellcode

    1. - (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
    2. - (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
    3. - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event


    Den Value des Controls (bei Dir 0 ... 5) ermittelst Du aus dem Winkel der Touchposition. In continueTrackingWithTouch würde ich mir den letzten Winkel merken und mit dem aktuellen vergleichen. So erkennst Du, ob der Finger mit oder gegen den Uhrzeigesinn geht. Merken kannst Du Dir das z.B. mit einer statischen Variable, z.B. so ...

    Quellcode

    1. static float lastWinkel = 0.0f;


    Ich hoffe, das hilft ...