gedrehtes Image nachträglich ermitteln wieviel grad gedreht

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

  • gedrehtes Image nachträglich ermitteln wieviel grad gedreht

    Hallo zusammen,
    ich habe mal wieder eine kleine Frage.

    Auf meinem View werden verschiedene Images platziert. Diese werden je nach Position um 90° gedreht.
    Dazu benutze ich eine eigene Methode

    Quellcode

    1. -(void)rotate:(int)degree {
    2. float rad = M_PI * (float)degree / 180.0;
    3. NSLog(@"gedreht: %f°", rad);
    4. [UIView beginAnimations:nil context:nil];
    5. [UIView setAnimationDuration:0];
    6. [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    7. aktivImageView.transform = CGAffineTransformMakeRotation(rad);
    8. [UIView commitAnimations];
    9. }



    So meine Frage ist nun wenn ich eins der Images aktiviere und das nachträglich um 45° weiterdrehen will.
    Also wenn bisher 0° gedreht soll es dann 45° gedreht sein, wenn 90° dann 135°
    also immer +45°

    ABER wie kann ich den aktuellen "gedrehten" Wert abfragen.

    Manuell eingeben ist kein Problem.....aber ich will ja den aktuellen Wert +45° haben......

    Also quasi ein .....

    Quellcode

    1. int grad = aktivesImageView.transform.roation.value;
    2. grad = grad + 45;
    3. [self rotate:grad];
    Wenn Dich alles verlässt kommt das allein sein.
    Wenn Du alles verlässt kommt die Einsamkeit.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Svennse ()

  • Wenn in der CGAffineTransform ausschließlich eine Rotation steht, kannst Du die Matrix zurückrechnen.

    Die Matrix sieht dann ja so aus:

    Quellcode

    1. cos(rad) sin(rad) 0
    2. -sin(rad) cos(rad) 0
    3. 0 0 1


    Also müsste der Winkel (in Radians) sich so ausrechnen lassen:

    Quellcode

    1. float rot = acos(aktivesImageView.transform.a) * (aktivesImageView.transform.b > 0) ? 1 : -1;

    Ist jetzt ins Trockene getippt, aber in die Richtung müsste es in etwa stimmen. Es sollte ein Wert von -PI .. PI rauskommen.

    Alternativ kannst Du auch die neue Matrix erstellen, indem Du auf die bisherige Matrix eine Rotationsmatrix von 45 Grad per CGAffineTransformConcat() draufmultiplizierst. Das entspricht dann der alten Transformation (egal was) und einer anschließenden Rotation um 45 Grad.
    Multigrad - 360°-Produktfotografie für den Mac
  • Svennse schrieb:

    So meine Frage ist nun wenn ich eins der Images aktiviere und das nachträglich um 45° weiterdrehen will.
    Also wenn bisher 0° gedreht soll es dann 45° gedreht sein, wenn 90° dann 135°
    also immer +45°

    Wenn es Dir nur um das weiterdrehen geht, kannst Du die Rotationsmatrizen auch einfach verketten:

    Quellcode

    1. aktivImageView.transform = CGAffineTransformRotate(aktivImageView.transform, rad);
    Den alten Wert brauchst Du Dir dafür nicht zu ermitteln bzw. zu merken.
    „Meine Komplikation hatte eine Komplikation.“
  • noch mal vielen dank für die tips

    Quellcode

    1. -(void)drehen:(id)sender {
    2. float rad = M_PI * (float)45 / 180.0;
    3. [UIView beginAnimations:nil context:nil];
    4. [UIView setAnimationDuration:0];
    5. [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    6. nextImageView.transform = CGAffineTransformRotate(nextImageView.transform, rad);
    7. [UIView commitAnimations];
    8. }



    so funktioniert es einwandfrei :)
    Wenn Dich alles verlässt kommt das allein sein.
    Wenn Du alles verlässt kommt die Einsamkeit.