.png als UIImageView drehen ?

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

  • .png als UIImageView drehen ?

    Guten Morgen,

    ich möchte Bilder die ich als png in eine UIImageView lade drehen oder auch gespiegelt darstellen können.

    Am liebsten würde ich das über Koordinaten machen. Also ich möchte ein png laden und es in verschiedenen Positionen anzeigen können, damit ich es nur einmal erstellen oder laden muss.

    Hat da jemand eine Idee wie ich das machen kann.


    Danke schon mal.
  • Hi JWDev,

    hier mal ne kleine Routine, wie man ein UIImageView skalieren und rotieren kann.

    float Pi = 3.141592653589793238;

    CGAffineTransform rotate = CGAffineTransformMakeRotation(0);
    [Image setTransform:rotate];


    Image.frame = CGRectMake(posSlider.value, 140, scalSlider.value, -scalSlider.value);
    Image.center = CGPointMake(posSlider.value, 140);

    rotate = CGAffineTransformMakeRotation(slider.value * Pi / 180);
    [Image setTransform:rotate];

    Bedenke aber, dass Du das Bild, sofern Du es auch skalieren möchtest, zuerst auf 0° zurückdrehst. Falls nicht, wird das Bild verzerrt.

    Ulrich
  • Original von haegar
    Hi JWDev,

    hier mal ne kleine Routine, wie man ein UIImageView skalieren und rotieren kann.

    float Pi = 3.141592653589793238;

    CGAffineTransform rotate = CGAffineTransformMakeRotation(0);
    [Image setTransform:rotate];


    Image.frame = CGRectMake(posSlider.value, 140, scalSlider.value, -scalSlider.value);
    Image.center = CGPointMake(posSlider.value, 140);

    rotate = CGAffineTransformMakeRotation(slider.value * Pi / 180);
    [Image setTransform:rotate];

    Bedenke aber, dass Du das Bild, sofern Du es auch skalieren möchtest, zuerst auf 0° zurückdrehst. Falls nicht, wird das Bild verzerrt.

    Ulrich


    Pi ist schon vordefiniert durch das Makro M_PI.

    Statt

    Quellcode

    1. CGAffineTransform rotate = CGAffineTransformMakeRotation(0);
    2. [Image setTransform:rotate];


    kann man auch schreiben:

    Quellcode

    1. [Image setTransform:CGAffineTransformIdentity];


    Oder irre ich?
    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].
  • ...und wiederhold drehen?

    Hallo zusammen,

    wenn wir schon am Drehen sind ;)
    Ich möchte ein Rad animieren. Es soll sich also ohne Unterbrechung immer von
    0-360° drehen.
    Wenn ich 360° angebe, dreht sich allerdings garnix...

    Danke für Tipps,
    Chelf
    [url]www.barranco-software.de[/url]

    Shake the Animals
    Der kleine Esel darf nicht singen
    iAbacus (für iPad)
  • So, jetzt hab ichs nochmal probiert...
    ...aber mein Rad dreht sich immer noch nicht konstant.

    Für eine Drehung gilt:
    bis 179° Animation im Uhrzeigersinn.
    ab 181° Animation gegen den Uhrzeigersinn.
    D.h. durch die Animation wird einfach zum Zielzustand hin interpoliert.

    Code (syntaktisch nicht korrekt - da ich gerade nicht vorm Xcode sitze):

    [UIView startAnimation];

    [UIView durationOfAnimation:1.0];

    rotate = CGAffineTransformMakeRotation(120 * Pi / 180); //Rad dreht sich im Uhrzeigersinn
    //rotate = CGAffineTransformMakeRotation(200 * Pi / 180); //Rad dreht sich gegen den Uhrzeigersinn

    [UIView commit];


    Das muss doch einfacher gehen... Ich stehe auf dem Schlauch.
    Oder muss ich wirklich die Animation in 3 Teile à 120° aufteilen?

    Danke für jede Hilfe,
    Chelf
    [url]www.barranco-software.de[/url]

    Shake the Animals
    Der kleine Esel darf nicht singen
    iAbacus (für iPad)
  • Hi,

    Du erzielst damit vermutlich denselben Effekt, wie er manchmal im Fernsehen zu sehen ist, wenn man meint, dass sich das Rad rückwärts dreht.

    Nehmen wir mal an, Du drehts das Rad um 355 Grad. Dann sieht das in Deiner Animation so aus, als würde es sich statt um 355 Grad nach vorne um 5 Grad nach hinten drehen.

    Du hast zwei Lösungsmöglichkeiten: Entweder das Rad langsamer drehen oder die FPS zu erhöhen (aber das Rad nicht um mehr als 180° pro Frame drehen).

    Ulrich
  • Bin leider immer noch nicht weitergekommen.
    Hab jetzt mal den Code rauskopiert:

    [UIView beginAnimations:@"rotateBall" context:NULL];
    [UIView setAnimationDuration:4.0];
    CGAffineTransform transform = CGAffineTransformMakeRotation(181.0 * M_PI / 180);
    chaserButton.transform = transform;
    [UIView commitAnimations];

    Wie man sieht, dauert die Animation 4 Sekunden, was langsam genug sein sollte.
    Und - wie im Posting weiter oben beschrieben - dreht sich der Ball ab 180° falschherum.

    Probierts mal mit irgendeinem Button aus (aber am besten nicht mit einem Kreis ;)

    Das Problem scheint die Art der Animation zu sein. Durch die Angabe eines Endzustands
    wird die Animation dorthin interpoliert. In diesem Fall also der kürzeste Weg zum angegebenen
    Winkel. Nicht die Rotation, sondern die Änderung vom Start- zum Endzustand wird in den
    angegebenen 4 Sekunden ausgeführt.

    Wie kann ich die eigentliche Rotation verlangsamen?

    Ich probiers noch mit einer impliziten Animation.

    Gruss,
    chelf
    [url]www.barranco-software.de[/url]

    Shake the Animals
    Der kleine Esel darf nicht singen
    iAbacus (für iPad)
  • Raddrehung gelöst

    CoreAnimation ist die Lösung.

    Mit folgendem Code dreht sich der Button um volle 360°:

    CABasicAnimation *theAnimation;
    theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    theAnimation.duration=1.3;
    theAnimation.autoreverses=NO;
    theAnimation.repeatCount = 5;
    theAnimation.fromValue = [NSNumber numberWithFloat:0.0];
    theAnimation.toValue = [NSNumber numberWithFloat:(360 * M_PI / 180)];
    [buttonLayer addAnimation:theAnimation forKey:@"ballRotation"];

    Drum herum kann man auch einfach ein [UIView startAnimation] .... [UIView commitAnimation]
    basteln, um die Position zu verändern.
    Somit bringt man den Ball endlich zum Rollen.

    Happy coding,
    Chelf
    [url]www.barranco-software.de[/url]

    Shake the Animals
    Der kleine Esel darf nicht singen
    iAbacus (für iPad)