• 数据请求过程中动画


    不管用同步请求,还是异步请求如果网络不佳总会出现几秒钟的请求时间!!

    在同步请求中:表现为界面所有UI不在接收用户的操作响应(程序假死状态!)

    在异步请求中:表现为点击程序没有任何反应,过几秒钟后请求后数据。更新UI!(程序反应迟钝现象)

    为了让用户体验度好一点,就有了在异步请求的过程中  做一个请求数据期间的动画,让用户知道当前处于数据请求阶段。

    下面贴一下代码

    //
    //  SearchAnimationView.h
    //  查询数据时动画
    //
    //  Created by admin on 16/1/19.
    //  Copyright © 2016年 123. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface SearchAnimationView : UIView
    +(void)showInSuperView:(UIView *)superView;
    +(void)hiddenSuperView:(UIView *)superView;
    @end
    //
    //  SearchAnimationView.m
    //  查询数据时动画
    //
    //  Created by admin on 16/1/19.
    //  Copyright © 2016年 123. All rights reserved.
    //
    
    #import "SearchAnimationView.h"
    
    @implementation SearchAnimationView
    +(void)showInSuperView:(UIView *)superView
    {
        SearchAnimationView *sa = [superView viewWithTag:42310];
        if (!sa)
        {
            sa = [[SearchAnimationView alloc]initWithFrame:CGRectMake(0, 0, 200, 100)];
            sa.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"notify2"]];
            sa.tag = 42310;
            sa.center = superView.center;
            sa.layer.cornerRadius = 12.f;
            [superView addSubview:sa];
            
            
            UIButton *background = [[UIButton alloc]initWithFrame:superView.frame];
            background.backgroundColor = [UIColor clearColor];
            background.tag = 638425;
            [background addTarget:sa action:@selector(doNothing) forControlEvents:UIControlEventTouchUpInside];
            [superView addSubview:background];
            
            
            
            NSMutableArray *arr = [NSMutableArray arrayWithCapacity:36];
            for (int i = 1; i < 37; i++)
            {
                UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"1_%d",i]];
                [arr addObject:image];
            }
            UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 42, 42)];
            imageView.tag = 76952;
            imageView.center = CGPointMake(sa.bounds.size.width/2, sa.bounds.size.height/2);
            imageView.animationImages = arr;
            imageView.animationRepeatCount = 0;
            imageView.animationDuration = 0.75;
            [imageView startAnimating];
            [sa addSubview:imageView];
        }
        [UIView animateWithDuration:0.5 animations:^{
            sa.hidden = NO;
            UIImageView *imageView = [sa viewWithTag:76952];
            UIButton *background = [sa viewWithTag:638425];
            if (![imageView isAnimating])
            {
                [imageView startAnimating];
            }
            background.hidden = NO;
            [superView bringSubviewToFront:background];
            [superView bringSubviewToFront:sa];
        }];
    }
    +(void)hiddenSuperView:(UIView *)superView
    {
        SearchAnimationView *sa = [superView viewWithTag:42310];
        if (sa)
        {
            [UIView animateWithDuration:0.5 animations:^{
                UIImageView *imageView = (UIImageView *)[sa viewWithTag:76952];
                [imageView stopAnimating];
                sa.hidden = YES;
                [superView sendSubviewToBack:sa];
                
                UIButton *background = (UIButton *)[superView viewWithTag:638425];
                background.hidden = YES;
                [superView sendSubviewToBack:background];
            }];
        }
    }
    -(void)doNothing
    {
        NSLog(@"*****  点击在透明的遮罩上  *****");
    }
    @end

    /* 使用遮罩层的作用:是为了防止在数据请求期间用户点击了其他的操作干扰UI,或者就不想让用户在请求数据期间点到UI界面的其他控件*/

    调用方式:

    在开始请求数据的时候:

    - (IBAction)startAnimation:(UIButton *)sender
    {
        //多用于正在请求数据的时候--开始请求动画
        [SearchAnimationView showInSuperView:self.view];
    //用于测试隐藏函数----多用于请求数据成功 [self performSelector:@selector(targetMethod) withObject:nil afterDelay:3.0]; }

    在请求数据成功之后:

    -(void)targetMethod
    {
        //关闭请求动画
        [SearchAnimationView hiddenSuperView:self.view];
    }

    文章到这已经结束啦,希望对路过的朋友用所帮助!!!

  • 相关阅读:
    HyperV创建NAT网络
    Win10
    ConEmu
    ffmpeg的centos、msys2、msvc编译
    7z压缩gopath的src的批处理
    VS2015自带v120的Platform Toolset
    Putty配置
    第一章:HTML5的基础
    java的错题整理
    第十四章:类的带参方法
  • 原文地址:https://www.cnblogs.com/Mgs1991/p/5141694.html
Copyright © 2020-2023  润新知