2012-03-30 8 views
31

Ich hätte gerne ein Bild in meiner iPhone App "Pop-in" auf dem Bildschirm, anstatt nur zu erscheinen. Mit "Pop-in" meine ich, dass es von einem kleinen Punkt zu seiner tatsächlichen Größe wachsen würde. Als Referenz entspricht dies genau dem "Pop" -Animationseffekt in Keynote. Ich bin völlig neu in iOS-Animationen, also wenn jemand mich in die Richtung auf die Animationseffekte zeigen könnte, die ich verwenden müsste, würde es sehr geschätzt werden.iOS - Animationseffekte - Bild-Pop-in

Dank

Brian

UPDATE Ich habe unter diesen Code aus den Vorschlägen gegeben. Das funktioniert, aber es skaliert mein Bild nach unten statt nach oben. Ich weiß, das liegt daran, dass ich 0,01 als Größe der Transformationsskalierung habe, aber ich würde gerne wissen, wie ich mit einem Bild der Größe 0.0 anfangen und auf 1 skalieren kann. Es ist nur eine Frage der Größe meines Bildes 0? Dank

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration: 0.2]; 
image.transform = CGAffineTransformMakeScale(0.01, 0.01); 
[UIView setAnimationDelegate:self]; 
[UIView commitAnimations]; 

Antwort

78

Die Wirkung Sie suchen ist so etwas wie dieses:

// instantaneously make the image view small (scaled to 1% of its actual size) 
view.transform = CGAffineTransformMakeScale(0.01, 0.01); 
[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
    // animate it to the identity transform (100% scale) 
    view.transform = CGAffineTransformIdentity; 
} completion:^(BOOL finished){ 
    // if you want to do something once the animation finishes, put it here 
}]; 
+1

Gibt es eine Möglichkeit, das Bild von einem anderen Punkt als dem Zentrum zu vergrößern? – tiguero

+5

Yep-Änderung seiner Ebene [Ankerpunkt] (http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html#//apple_ref/doc/c_ref/CALayer) . 'die Ansicht.layer.anchorPoint = CGPointMake (0, 0) 'wird die Ansicht von oben links skalieren; '(1, 1)' ist seine untere rechte Seite. –

+0

Welche Art von Objekt ist das variable Bild? –

0

Sie haben den Rahmen der Ansicht zu animieren, ist es von Null auf den Endzustand zu schrumpfen. Dies kann zum Beispiel mit UIView Blockanimation geschehen.

Also zum Beispiel mit Ihrer Sicht als IBOutlet-Eigenschaft self.myView mit der endgültigen Größe und Position beginnen, aber die versteckte Flagge setzen. Dann wenn Sie es verwenden Sie die folgende erscheinen:

// Save old frame as final stater and set it to zero size for the start of the animation 
// But keep the same center position, so it just grows and don't move around 
CGRect oldFrame = self.myView.frame; 
CGRect oldCenter = self.myView.center; 

self.myView.frame = CGRectZero; 
self.myView.center = oldCenter; 

self.myView.hidden = NO; 

NSTimeInterval duration = 0.3; 

[UIView animateWithDuration:duration delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
       // New position and size after the animation should be the same as in Interface Builder 
       self.myView.frame = oldFrame 
    } 
        completion:^(BOOL finished){ 
               // You can do some stuff here after the animation finished 
        }]; 
+0

Das ... wird wahrscheinlich nicht gut funktionieren. Wenn Sie den Rahmen einer Bildansicht animieren, wird er gezwungen, sich bei jedem Bild der Animation neu zu zeichnen. –

+1

@NoahWithersspoon wäre eine Transformation ein besserer Weg? – Thyraz

+0

Yup. Das Animieren von CGAffineTransformMakeScale (0.01,0.01) zu CGAffineTransformIdentity würde den Trick ausführen. –

0

Swift 2.0 Version

view.transform = CGAffineTransformMakeScale(0.01, 0.01); 

    UIView.animateWithDuration(0.2, delay: 0, options: .CurveEaseOut, animations: {() -> Void in 
     // animate it to the identity transform (100% scale) 
     self.view.transform = CGAffineTransformIdentity; 

     }) { (finished) -> Void in 
     // if you want to do something once the animation finishes, put it here 
    } 
4

, wenn Sie Willst du etwas wie Facebook macht auf jeden Post dann verwenden Sie diese

-(void)animateButton:(UIButton *)sender{ 
UIButton * btn = (UIButton *)sender; 
[UIView animateWithDuration:0.3/1.5 animations:^{ 
    btn.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.4, 1.4); // scales up the view of button 
} completion:^(BOOL finished) { 
    [UIView animateWithDuration:0.3/2 animations:^{ 
     btn.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.7, 0.7);// scales down the view of button 
    } completion:^(BOOL finished) { 
     [UIView animateWithDuration:0.3/2 animations:^{ 
      btn.transform = CGAffineTransformIdentity; // at the end sets the original identity of the button 
     }]; 
    }]; 
}];} 

gerade diese Methode aufrufen, wenn Sie die Ansicht

animieren möchten, wenn Sie Text und Bild auf den Button und Sie wollen einfach nur das Bild der Schaltfläche animieren dann nur „BTN“ mit „BTN ersetzen. imageView ", wird nur eine Animation in der Bildansichtseigenschaft der Schaltfläche erstellt. Hoffe es hilft Alles Gute.

0

Für, dass Sie eine einfache UIView verwenden müssen

die UIView aktuellen Ansicht hinzufügen.

- (void) initPopUpView 
{ 
    popup.alpha = 0; 
    popup.frame = CGRectMake (160, 240, 0, 0); 
    [self.view addSubview:popup]; 
} 

- (void) animatePopUpShow 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationWillStartSelector:@selector(initPopUpView)]; 

    popup.alpha = 1; 
    popup.frame = CGRectMake (20, 40, 300, 400); 

    [UIView commitAnimations]; 
}