2010-02-25 17 views
49

Mam główne UIView, gdzie wyświetlam różne dane. Następnie umieścić przycisk, który wyświetla podrzędny tak:Animacja addSubview

- (IBAction) buttonClicked:(id)sender 
{ 
    UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(25,25,50,20)]; 
    UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(25,25,50,25)]; 
    newLabel.text = @"some text"; 
    [newView addSubview:newLabel]; 

    [self.view addSubview:newView]; 
    [newLabel release]; 
    [newView release]; 
} 

newView pojawia się w porządku, ale to nie animować sobie w dowolny sposób, po prostu pojawia się natychmiast. Jak mogę dodać animację po wyświetleniu newView? Jak powiększanie lub zsuwanie w dół lub coś w tym stylu. Czy jest jakiś prosty kod?

Odpowiedz

76

Cześć Można użyć UIView animacji:

[newView setFrame:CGRectMake(0.0f, 480.0f, 320.0f, 480.0f)]; //notice this is OFF screen! 
[UIView beginAnimations:@"animateTableView" context:nil]; 
[UIView setAnimationDuration:0.4]; 
[newView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)]; //notice this is ON screen! 
[UIView commitAnimations]; 

SDK będzie teraz wymyślimy dla ciebie i animowanie widok na stanowiskach Ci go dał. Działa to dla większości właściwości UIViews: alpha, skala, granic, ramek, itp

Istnieją również budować w animacji jak Flip i zwinięcie:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight 
          forView:newView 
          cache:YES]; 

[self.navigationController.view addSubview:settingsView.view]; 
[UIView commitAnimations]; 

nadzieję, że to pomaga się coraz początek :)

+0

chłodny, dzięki, że pracował dobrze – Mike

+0

ile pierwszy przykład jest technicznie ważny jest słaba forma biorąc pod uwagę duże ilości rozmiarów ekranu musisz wspierać dzisiaj i tak polecam albo odpowiedź drugi lub @ adedoy za – Sirens

22

Link przeciwko QuarzCore ramach

#import <QuartzCore/QuartzCore.h> 

CATransition *transition = [CATransition animation]; 
transition.duration = 1.0; 
transition.type = kCATransitionPush; //choose your animation 
[newView.layer addAnimation:transition forKey:nil]; 
[self.view addSubview:newView]; 
+1

+1 Możesz także użyć podtypów przejścia, aby dodatkowo dostosować plik przejścia.https: //developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CATransition_class/#//apple_ref/doc/constant_group/Common_Transition_Subtypes – anoop4real

79

ten jest dla Zalecane użycie:

[UIView transitionWithView:containerView duration:0.5 
     options:UIViewAnimationOptionTransitionCurlUp //change to whatever animation you like 
     animations:^ { [containerView addSubview:subview]; } 
     completion:nil]; 
+1

Hej @adedoy jak wykorzystać odpowiednią animację bez możliwości odwrócenia? jak pushviewcontroller ............ –

19

Znalazłem, że nawet z blokami animacji i opcjami, próba animowania samego addSubview nic by dla mnie nie dała. Znalazłem obejście, które ma ustawić alias subview na 0.0, dodać podgląd podzadania, a następnie animować ustawienie alfa z 0.0 na 1.0. To daje mi efekt, którego szukałem.

Mam nadzieję, że to pomoże komuś innemu.

UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 100, 100)]; 
redView.backgroundColor = [UIColor redColor]; 
redView.alpha = 0.0; 

[self.view addSubview:redView]; 

[UIView animateWithDuration:0.5 animations:^{ 
    redView.alpha = 1.0; 
}]; 
+0

idealna odpowiedź do rozpuszczenia w widoku – Fattie

10

Zróbmy to szybko.

var redView = UIView(frame:CGRectMake(20,20,100,100)) 
redView.backgroundColor = UIColor.redColor 
redView.alpha = 0.0 
view.addSubview(redView) 

UIView.animateWithDuration(0.25) {() -> Void in 
    redView.alpha = 1.0 
} 

Dodawanie podrzędny nie mogą być animowane po prostu umieszczenie go w bloku animateWithDuration. I nie można animować za pomocą ukrytego.