wake-up-neo.com

addSubview-Animation

Ich habe Haupt-UIView, in dem ich verschiedene Daten anzeige. Dann habe ich eine Schaltfläche eingefügt, die die folgende Unteransicht anzeigt:

- (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 sieht gut aus, animiert sich aber nicht, sondern erscheint sofort. Wie kann ich eine Art Animation hinzufügen, wenn newView angezeigt wird? Wie zoomen oder nach unten schieben oder so ähnlich. Gibt es einen einfachen Code?

56
Mike

Hallo ihr könntet die UIView Animationen benutzen:

[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];

Das SDK wird dies nun für Sie herausfinden und den Blick auf die Positionen animieren, die Sie ihm gegeben haben. Dies funktioniert für die meisten Eigenschaften von UIViews: Alpha, Skalierung, Grenzen, Frames usw.

Es gibt auch eingebaute Animationen als Flip und Curl:

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

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

Hoffe das hilft dir beim Einstieg :)

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

link gegen QuarzCore Framework

#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]; 
23
Chakalaka

Machen wir das in Swift.

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
}

Das Hinzufügen einer Unteransicht kann nicht durch einfaches Einfügen in einen animateWithDuration-Block animiert werden. Sie kann auch nicht mit hidden animiert werden.

20
Rob Norback

Ich stellte fest, dass der Versuch, addSubview alleine zu animieren, selbst mit den Animationsblöcken und -optionen nichts für mich tun würde. Ich habe eine Problemumgehung gefunden, die darin besteht, das Alpha der Unteransicht auf 0.0 zu setzen, die Unteransicht hinzuzufügen und dann die Einstellung des Alphas von 0.0 auf 1.0 zu animieren. Dies gibt mir den gewünschten Einblendeffekt.

Hoffe das hilft jemand anderem.

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;
}];
20
Kyle Clegg