淡出淡出动画

HiD*_*uEi 53 cocoa-touch core-animation ios

这是我挣扎了一段时间的一些代码.

如果您开始淡入淡出动画,则标签文本将淡入.如果我启动淡出动画,则标签文本会淡出.

当我启动该startFade方法时,仅显示淡出.fadeIn在启动fadeOut方法之前,如何等待方法以可视方式完成.

-(IBAction)startFade:(id)sender{
    [self fadeIn];
    [self fadeOut];
}

-(IBAction)fadeIn:(id)sender{
    [self fadeIn];
}

-(IBAction)fadeOut:(id)sender{
[self fadeOut];
}

-(void) fadeIn{
    [_label setAlpha:0];
    [UILabel beginAnimations:NULL context:nil];
    [UILabel setAnimationDuration:2.0];
    [_label setAlpha:1];
    [UILabel commitAnimations];
}

-(void) fadeOut{
    [UILabel beginAnimations:NULL context:nil];
    [UILabel setAnimationDuration:2.0];
    [_label setAlpha:0];
    [UILabel commitAnimations];
}
Run Code Online (Sandbox Code Playgroud)

hgw*_*tle 115

当您像往常一样背靠背地调用fadeInfadeOut方法时,代码会立即运行,因此您只能看到上一个调用方法的动画.基于UIView块的动画提供了一个完成处理程序,它似乎正是您正在寻找的.所以你的代码看起来像这样:

-(IBAction)startFade:(id)sender {

    [_label setAlpha:0.0f];        

    //fade in
    [UIView animateWithDuration:2.0f animations:^{

        [_label setAlpha:1.0f];

    } completion:^(BOOL finished) {

        //fade out
        [UIView animateWithDuration:2.0f animations:^{

            [_label setAlpha:0.0f];

        } completion:nil];

    }];
}
Run Code Online (Sandbox Code Playgroud)

迅速:

@IBAction func startFade(_ sender: AnyObject) {

    label.alpha = 0.0

    // fade in
    UIView.animate(withDuration: 2.0, animations: { 
        label.alpha = 1.0
    }) { (finished) in
        // fade out
        UIView.animate(withDuration: 2.0, animations: {
            label.alpha = 0.0
        })
    }
}
Run Code Online (Sandbox Code Playgroud)


hol*_*lex 32

为你做的工作(这_label是你的标签);

- (IBAction)startFade:(id)sender {
    [_label setAlpha:0.f];

    [UIView animateWithDuration:2.f delay:0.f options:UIViewAnimationOptionCurveEaseIn animations:^{
        [_label setAlpha:1.f];
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:2.f delay:0.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
            [_label setAlpha:0.f];
        } completion:nil];
    }];
}
Run Code Online (Sandbox Code Playgroud)

  • 可以通过将UIViewAnimationOptionAutoReverse添加到第一个动画的选项来简化,即UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAutoReverse,刚刚完成:nil而不是另一个动画. (5认同)

yaz*_*azh 6

试试这个..

// 淡出

 -(void)fadeOut:(UIView*)viewToDissolve withDuration:(NSTimeInterval)duration   andWait:(NSTimeInterval)wait
{
[UIView beginAnimations: @"Fade Out" context:nil];

// wait for time before begin
[UIView setAnimationDelay:wait];

// druation of animation
[UIView setAnimationDuration:duration];
viewToDissolve.alpha = 0.0;
[UIView commitAnimations];
}
Run Code Online (Sandbox Code Playgroud)

// 淡入

-(void) fadeIn:(UIView*)viewToFadeIn withDuration:(NSTimeInterval)duration andWait:(NSTimeInterval)wait

{
[UIView beginAnimations: @"Fade In" context:nil];

// wait for time before begin
[UIView setAnimationDelay:wait];

    // druation of animation
[UIView setAnimationDuration:duration];
viewToFadeIn.alpha = 1;
[UIView commitAnimations];

}
Run Code Online (Sandbox Code Playgroud)

//淡出淡出

-(void) fadeInFromFadeOut: (UIView*)viewToFadeIn withDuration:(NSTimeInterval)duration
{
    viewToFadeIn.hidden=NO;
    [self fadeOut:viewToFadeIn withDuration:1 andWait:0];
    [self fadeIn:viewToFadeIn withDuration:duration andWait:0];

}
Run Code Online (Sandbox Code Playgroud)

//按钮操作

-(void) buttonClicked :(id)sender
{
   NSLog(@"Button clicked");

// Each button is given a tag
int tag = ((UIButton*)sender).tag;
if (tag ==1)
{
    sprite.alpha  =1;
    [self fadeOut : sprite withDuration: 10 andWait : 1 ];
}
else if (tag ==2)
{
    sprite.alpha  =0;
    [self fadeIn : sprite withDuration: 3 andWait : 1 ];
}
else
{
    [self fadeInFromFadeOut:sprite withDuration:10];
}
}
Run Code Online (Sandbox Code Playgroud)

查看此链接以下载示例..

请参阅此链接.

很高兴与您分享.. :-)


iPh*_*per 5

通用答案:您可以使用此方法将动画应用于任何 UIView 对象。首先创建一个 UIView 类的扩展。创建一个单独的swift文件并像这样编写代码

import Foundation
import UIKit

extension UIView {

    func fadeIn() {
        //Swift 2
        UIView.animateWithDuration(1.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: {
            self.alpha = 1.0
        }, completion: nil)

        //Swift 3, 4, 5
        UIView.animate(withDuration: 1.0, delay: 0.0, options: UIView.AnimationOptions.curveEaseIn, animations: {
            self.alpha = 1.0
        }, completion: nil)
    }


    func fadeOut() {
        //Swift 2
        UIView.animateWithDuration(1.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseOut, animations: {
            self.alpha = 0.0
        }, completion: nil)

        //Swift 3, 4, 5
        UIView.animate(withDuration: 1.0, delay: 0.0, options: UIView.AnimationOptions.curveEaseOut, animations: {
            self.alpha = 0.0
        }, completion: nil)
    }


}
Run Code Online (Sandbox Code Playgroud)

这里 self 指的是您所指的任何 UIView 。您可以使用按钮、标签等来调用这 2 种方法。

然后在任何其他 swift 类中,您可以像这样调用fadeIn() 和fadeOut():

self.yourUIObject.fadeIn()
self.yourUIObject.fadeOut()
Run Code Online (Sandbox Code Playgroud)

这为任何 UIObject 提供了所需的动画效果。