• 动画特效一:图片翻转


    前几节内容中,我具体的解说了动画的理论知识及基本使用。在以后的章节中,我将用实际的案例来展示动画特效。

    这一节的样例是图片翻转。

    先看看终于效果:


    素材准备:提供了两张图片,Baby.png和Xiaoming.png,而且它们的尺寸大小均为150 X 150。图片例如以下:

        


    设计思路一:

    1. 放置一个ContainerView,其尺寸大小也为150 X 150,用于存放图片。

    2. 将上面的两张图片均放置在ContainerView中。

    3. 进行outlets连线工作。

    XIB中设计界面例如以下图:


    编程思路:

    1. 设计一个变量front,用于推断当前显示的是哪一张图片。

    2. 初始化的时候,将后面的图片绕着y轴旋转180度,达到镜像的效果。这种话,等旋转到前面的时候。就是正面显示了。

    3. 运行UIView的block动画操作。完毕翻转效果。

    代码:

    1. front变量:

    @property (nonatomic,assign,getter = isFront) BOOL front;

    2. 初始化工作:

    - (void)viewDidLoad {
        [super viewDidLoad];
        
        self.backImageView.layer.cornerRadius = 75;
        self.backImageView.layer.masksToBounds = YES;
        
        self.frontImageView.layer.cornerRadius = 75;
        self.frontImageView.layer.masksToBounds = YES;
        self.backImageView.layer.transform = CATransform3DMakeRotation(M_PI, 0, 1, 0);
        
        self.front = YES;
    }


    首先设置图片的显示效果为圆形。即cornerRadius的大小为图片宽度的一半。 初始化front的值,表示默认显示前面的图片;关键的一句
    self.backImageView.layer.transform = CATransform3DMakeRotation(M_PI, 0, 1, 0);

    我们能够使用view debugger来分析层次结构。

    先看正面图:


    能够看出有五层: (UIWindow, UIView, UIContainerView, backImageView, frontImageView).

    然后再看看背面图:

    Baby.png这张图片和我文章开头列出的头像方向是一致的,而我们此时是从背面看过去的。说明CATransform3DMakeRotation的确将图片进行了翻转了180度的工作。

    3. 动画终于实现的代码:

    [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
            self.rotateView.layer.transform = CATransform3DRotate(self.rotateView.layer.transform, M_PI_2, 0, 1, 0);
        } completion:^(BOOL finished) {
            if(self.isFront){
                self.frontImageView.hidden = YES;
                self.backImageView.hidden = NO;
                self.front = NO;
            }
            else{
                self.frontImageView.hidden = NO;
                self.backImageView.hidden = YES;
                self.front = YES;
            }
            
            [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
                self.rotateView.layer.transform = CATransform3DRotate(self.rotateView.layer.transform, M_PI_2, 0, 1, 0);
            } completion:nil];
        }];

    大致的思路就是先将图片旋转90度,达到这个点的时候,立马将当前图片隐藏。将背面图片显示,而且将front变量的值进行取反工作。

    然后紧接着在进行旋转90度的操作工作。


    设计思路二:

    直接使用系统自带的transitionWithView实现动画效果。

    XIB中设计界面例如以下图:


    注意到,此时ContainerView中仅仅存放一张图片,而图片的切换工作,都交给了系统自带的功能来完毕了。

    此时。动画的实现代码例如以下:

    [UIView transitionWithView:self.containerView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
                self.iconView.image = [UIImage imageNamed:@"Baby"];
            } completion:^(BOOL finished) {
                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                    [UIView transitionWithView:self.containerView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromRight animations:^{
                        self.iconView.image = [UIImage imageNamed:@"Xiaoming"];
                    } completion:nil];
                });
            }];

  • 相关阅读:
    HDOJ 1877
    POJ 2210
    HDOJ 1230(火星A+B)
    大数想减
    HDU 2115
    HDOJ 1234
    HDOJ 3784
    HDOJ3782(xxx定理)
    C# 使用 Stopwatch 测量代码运行时间
    SQL返回当前天是星期几
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6899144.html
Copyright © 2020-2023  润新知