web-dev-qa-db-ja.com

addSubviewアニメーション

さまざまなデータを表示するメインUIViewがあります。次に、次のようなサブビューを表示するボタンを配置します。

- (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は正常に表示されますが、それ自体はアニメーション化されず、ただちに表示されます。 newViewが表示されたときに何らかのアニメーションを追加するにはどうすればよいですか?ズームやスライドダウンなどのようなものです。簡単なコードはありますか?

56
Mike

こんにちはUIView Animationsを使用できます。

[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はこれを自動的に判断し、指定した位置に合わせてビューをアニメーション化します。これは、UIViewのほとんどのプロパティ(アルファ、スケール、境界、フレームなど)で機能します。

また、フリップおよびカールなどのアニメーションが組み込まれています。

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

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

これがあなたが始めるのに役立つことを願っています:)

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

quarzCoreフレームワークに対するリンク

#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

これを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
}

サブビューの追加は、単にanimateWithDurationブロックに入れるだけではアニメーション化できません。また、hiddenを使用してアニメーション化することはできません。

20
Rob Norback

アニメーションブロックとオプションを使用しても、addSubviewだけをアニメーション化しようとしても何の効果もありません。サブビューのアルファを0.0に設定し、サブビューを追加してから、アルファの設定を0.0から1.0にアニメートする回避策を見つけました。これにより、探していたフェードイン効果が得られます。

これが他の人の助けになることを願っています。

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