UIBAsicAnimation - noch ein mal

  • UIBAsicAnimation - noch ein mal

    Hallo, mache eine UIBAsicAnimation und will das die Drehung dann erhalten bleibt. Neue drehung soll dort starten, wo die alte beendet wurde.
    Nur wie? Habe mal im Internet nach Lösungen gesucht, viele vorgeschlagen bekommen, doch keine funktioniert so wirklich.
    Drehe mein Imageview um 90, 180 oder 270 Grad, dann soll es dort stehen blieben bis es wieder um 90, 180 oder 270 grad gedreht wird.

    Quellcode

    1. - (IBAction)pushButton:(id)sender
    2. {
    3. [self setAltePfeilPosition:_momentanePfeilPosition];
    4. NSNumber *toNumber;
    5. switch ([sender tag]) {
    6. case 0:
    7. switch (_momentanePfeilPosition) {
    8. case 0:
    9. return;
    10. case 1:
    11. toNumber = [NSNumber numberWithFloat:M_PI + M_PI / 2];
    12. break;
    13. case 2:
    14. toNumber = [NSNumber numberWithFloat: M_PI];
    15. break;
    16. case 3:
    17. toNumber = [NSNumber numberWithFloat: M_PI / 2];
    18. break;
    19. }
    20. break;
    21. case 1:
    22. switch (_momentanePfeilPosition) {
    23. case 0:
    24. toNumber = [NSNumber numberWithFloat: M_PI / 2];
    25. break;
    26. case 1:
    27. return;
    28. case 2:
    29. toNumber = [NSNumber numberWithFloat:M_PI + M_PI / 2];
    30. break;
    31. case 3:
    32. toNumber = [NSNumber numberWithFloat: M_PI];
    33. break;
    34. }
    35. break;
    36. case 2:
    37. switch (_momentanePfeilPosition) {
    38. case 0:
    39. toNumber = [NSNumber numberWithFloat: M_PI];
    40. break;
    41. case 1:
    42. toNumber = [NSNumber numberWithFloat: M_PI / 2];
    43. break;
    44. case 2:
    45. return;
    46. case 3:
    47. toNumber = [NSNumber numberWithFloat: M_PI + M_PI / 2];
    48. break;
    49. }
    50. break;
    51. case 3:
    52. switch (_momentanePfeilPosition) {
    53. case 0:
    54. toNumber = [NSNumber numberWithFloat: M_PI + M_PI / 2];
    55. break;
    56. case 1:
    57. toNumber = [NSNumber numberWithFloat: M_PI];
    58. break;
    59. case 2:
    60. toNumber = [NSNumber numberWithFloat: M_PI / 2];
    61. break;
    62. case 3:
    63. return;
    64. }
    65. break;
    66. }
    67. [self setMomentanePfeilPosition:[sender tag]];
    68. CABasicAnimation *ani1 = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    69. ani1.delegate = self;
    70. ani1.duration = 4;
    71. ani1.toValue = toNumber;
    72. ani1.removedOnCompletion = NO;
    73. ani1.fillMode = kCAFillModeForwards;
    74. [_pfeilImage.layer addAnimation:ani1 forKey:@"drehen"];
    75. }
    Alles anzeigen


    Quellcode

    1. - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
    2. {
    3. if (anim == [_pfeilImage.layer animationForKey:@"drehen"]) {
    4. [_pfeilImage.layer removeAllAnimations];
    5. CGAffineTransform drehen;
    6. if (_altePfeilPosition == _momentanePfeilPosition) return; //der pfeil liegt richtig
    7. switch (_momentanePfeilPosition) {
    8. case 0: //nach 0 drehen
    9. switch (_altePfeilPosition) { // von...
    10. case 1:
    11. drehen = CGAffineTransformMakeRotation(M_PI + M_PI / 2);
    12. break;
    13. case 2:
    14. drehen = CGAffineTransformMakeRotation(M_PI);
    15. break;
    16. case 3:
    17. drehen = CGAffineTransformMakeRotation(M_PI / 2);
    18. break;
    19. }
    20. break;
    21. case 1: // nach 1 drehen
    22. switch (_altePfeilPosition) { // von ...
    23. case 0:
    24. drehen = CGAffineTransformMakeRotation(M_PI / 2);
    25. break;
    26. case 2:
    27. drehen = CGAffineTransformMakeRotation(M_PI + M_PI / 2);
    28. break;
    29. case 3:
    30. drehen = CGAffineTransformMakeRotation(M_PI);
    31. break;
    32. }
    33. break;
    34. case 2: // nach 2 drehen
    35. switch (_altePfeilPosition) { // von ...
    36. case 0:
    37. drehen = CGAffineTransformMakeRotation(M_PI);
    38. break;
    39. case 1:
    40. drehen = CGAffineTransformMakeRotation(M_PI / 2);
    41. break;
    42. case 3:
    43. drehen = CGAffineTransformMakeRotation(M_PI + M_PI / 2);
    44. break;
    45. }
    46. break;
    47. case 3: // nach 3 drehen
    48. switch (_altePfeilPosition) { // von ...
    49. case 0:
    50. drehen = CGAffineTransformMakeRotation(M_PI + M_PI / 2);
    51. break;
    52. case 1:
    53. drehen = CGAffineTransformMakeRotation(M_PI);
    54. break;
    55. case 2:
    56. drehen = CGAffineTransformMakeRotation(M_PI / 2);
    57. break;
    58. }
    59. break;
    60. }
    61. [_pfeilImage setTransform:drehen];
    62. }
    63. }
    Alles anzeigen


    Was mache ich falsch?
    Und warum dreht sich manchmal mein Pfeil plötzlich gegen die Uhrzeigerrichtung obwohl ich nirgends ein MINUS habe?

    Danke :)