2012-03-30 32 views
31

Chciałbym mieć obraz w "pop-in" na ekranie iPhone'a, a nie tylko pojawiać się. Mówiąc "pop-in", mam na myśli, że wzrośnie z małej kropki do rzeczywistej wielkości. Dla porównania jest to dokładnie to samo, co efekt animacji "pop" w Keynote. Jestem całkowicie nowy w animacjach iOS, więc jeśli ktoś mógłby wskazać mi kierunek efektów animacji, których potrzebowałbym użyć, byłoby to bardzo cenne.iOS - efekty animacji - pop-in Image

Dzięki

Brian

UPDATE Dodałem ten kod z poniższych sugestii. Działa to, ale skaluje obraz, a nie w górę. Wiem, że to dlatego, że mam 0,01 jako rozmiar skali transformacji, ale chciałbym wiedzieć, jak mogę zacząć od obrazu o wielkości 0,0 i skali do 1. Czy to tylko kwestia ustawienia rozmiaru mojego obrazu na 0? Dzięki

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

Odpowiedz

78

Efekt szukasz jest coś takiego:

// 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

Czy istnieje sposób powiększenia skali obrazu z punktu innego niż centrum? – tiguero

+5

Yep-zmień jego warstwę [punkt zakotwiczenia] (http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html#//apple_ref/doc/c_ref/CALayer) . 'theView.layer.anchorPoint = CGPointMake (0, 0) 'sprawi, że skala widoku od jego górnego lewego; '(1, 1)' jest prawym dolnym ruchem. –

+0

Jakiego rodzaju obiektem jest obraz zmienny? –

0

Trzeba animować ramkę widoku, aby zmniejszyć go od zera do stanu końcowego. Można to zrobić na przykład za pomocą animacji bloku UIView.

Na przykład zacznij od widoku jako własność IBOutlet self.myView z ostatecznym rozmiarem i pozycją, ale ustaw ukrytą flagę. Wtedy, kiedy ma się pojawić należy użyć następujących:

// 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

To ... prawdopodobnie nie będzie działać poprawnie. Animowanie ramki widoku obrazu zmusza go do przerysowania w każdej klatce animacji. –

+1

@NoahWitherspoon byłby lepszy sposób transformacji? – Thyraz

+0

Yup. Animowanie z CGAffineTransformMakeScale (0.01,0.01) do CGAffineTransformIdentity powinno wystarczyć. –

0

Swift 2.0 wersja

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

jeśli chce coś takiego, jak Facebook ma na lubię każdy post, a następnie użyj tego

-(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 
     }]; 
    }]; 
}];} 

tylko wywołać tę metodę, jeśli chcesz animować widoku

jeśli tekst i obraz na przycisku i po prostu chcesz animować obraz przycisku potem po prostu zastąpić „BTN” z „BTN. imageView ", po prostu wygeneruje animację we właściwości widoku obrazu przycisku. Mam nadzieję, że pomoże Wszystkiego najlepszego.

0

Do tego trzeba będzie użyć prostego UIView

Dodaj UIView do bieżącego widoku.

- (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]; 
}