美文网首页runtimeiOS进阶指南程序员
iOS runtime 运行时( 四 深谈)

iOS runtime 运行时( 四 深谈)

作者: 柠檬草YF | 来源:发表于2016-03-24 00:25 被阅读1282次

    哦哦,切克闹,又来分享了,EveryBody 看过来
    这次 来谈谈项目中经常遇到的一个功能
    iOS runtime 运行时( - 俗谈)
    iOS runtime 运行时( 二 深谈)
    iOS runtime 运行时( 三 深谈)
    iOS runtime 运行时( 四 深谈)

    在View上 加载 LoadingView,这是当你界面没有变化
    ,而你在做数据处理时,需要给用户添加的动画提示,我
    们今天用Runtime 来实现一个类别,来方便的添加 这个 
    LoadingView,我们用 MBProgressHUD 这个常见的 加
    载动画来实现,如果你有别的 动画,也可以类似的方法写
    

    新建一个类别文件 UIView+FYLoadingView
    .h 文件

    #import <UIKit/UIKit.h>
    
    @interface UIView (FYLoadingView)
    /**
     * message 可以 为 空
     */
    -(void)showLoadingViewWithMessage:(NSString*)message;
    
    /**
     * message 为空,会 马上 消失
       message 不为空,会 先显示 文字,延迟 消失
     */
    -(void)stopLoadingViewWithMessage:(NSString*)message;
    @end
    

    .m 文件

    #import "UIView+FYLoadingView.h"
    #import "MBProgressHUD.h"
    #import <objc/runtime.h>
    static const void *kHttpRequestHUDKeyFY = @"kHttpRequestHUDKeyFY";
    
    @interface UIView ()
    @property(nonatomic,strong)MBProgressHUD *progressHUDFY;
    @end
    @implementation UIView (FYLoadingView)
    // 设置 属性的 Getter方法,利用Runtime 来添加这个属性
    -(MBProgressHUD *)progressHUDFY
    {
        MBProgressHUD *HUD = objc_getAssociatedObject(self, &kHttpRequestHUDKeyFY);
        if (HUD == nil)
        {
             HUD = [[MBProgressHUD alloc] initWithView:self];
            [self addSubview:HUD];
            objc_setAssociatedObject(self, &kHttpRequestHUDKeyFY, HUD, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        }
        return HUD;
    }
    // 然后 就是 出现动画 和 隐藏动画了
    -(void)showLoadingViewWithMessage:(NSString*)message
    {
        if (message) {
            self.progressHUDFY.labelText = message;
        }else
        {
            self.progressHUDFY.labelText = @"";
        }
        [self.progressHUDFY show:YES];
    }
    
    -(void)stopLoadingViewWithMessage:(NSString*)message
    {
        if (message.length)
        {
            self.progressHUDFY.labelText = message;
            [self.progressHUDFY hide:YES afterDelay:.5];
        }
        else
        {
            [self.progressHUDFY hide:YES];
        }
    }
    @end
    
    

    这样子,我们的 类别文件 就写完了

    调用的时候 很简单的
    只要引用头文件 #import "UIView+FYLoadingView.h"

    如果实在 UIViewController 里面,调用是这样的
    动画出现

    [self.view showLoadingViewWithMessage:@"加载中"];
    

    动画消失

    // 直接消失
    [self.view stopLoadingViewWithMessage:@""];
    // 先显示字,延迟消失
    [self.view stopLoadingViewWithMessage:@"网络不给力"];
    
    

    好的 ,今天就分享到这里,不知对大家有帮助没有,喜欢就给个 喜欢吧

    相关文章

      网友评论

        本文标题:iOS runtime 运行时( 四 深谈)

        本文链接:https://www.haomeiwen.com/subject/alhrlttx.html