zoukankan      html  css  js  c++  java
  • APP换肤

    一.需求说明

    当一个APP用户量大的时候,就需要给不同的用户做标签,用来彰显身份.比如QQ的会员,VIP等不同的皮肤功能.

    二.实现方法.

    1. 所谓不同的皮肤,就是不同的权限(身份)显示不同的本地或者网络图片.为了给图片做区别.就需要不同的命名方式. 比如普通身份(status_normal),vip身份(status_vip). 也就是说在基础的图片名后面加上身份标记.

    皮肤.png

    1. 需要写一个UIImage的Category. 需要处理的是:将系统的imageNamed方法替换成自己的方法MC_imageNamed.在这方法里面进行身份/权限的判断.拼接不同的图片名称.达到换肤的目的.
    #import "UIImage+Helper.h"
    #import <objc/runtime.h>
    
    @implementation UIImage (Helper)
    
    + (void)load {
    
        // 获取UIImage的imageNamed方法
        Method imageNameddd = class_getClassMethod([UIImage class], @selector(imageNamed:));
        // 获取MC_imageNamed方法
        Method MC_imageNamed = class_getClassMethod([UIImage class], @selector(MC_imageNamed:));
       // 方法替换
        method_exchangeImplementations(imageNameddd, MC_imageNamed);
    }
    
    + (nullable UIImage *)MC_imageNamed:(NSString *)name {
        // 用户的权限
        NSInteger roleId = 0;
        if (roleId == 0) {
            name = [NSString stringWithFormat:@"%@_normal",name];
        } else {
            name = [NSString stringWithFormat:@"%@_vip",name];
        }
        return [self MC_imageNamed:name];
    }
    
    @end
    
    1. 使用.
      正常的图片赋值. imageView.image = [UIImage imageNamed:@"status"];

    三.说明
    1.需要导入<objc/runtime.h>
    不导入会报错
    Declaration of 'Method' must be imported from module 'ObjectiveC.runtime' before it is required

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时能够更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。这种特性意味着objective-c不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以正常的运行。这个运行时系统即Objc Runtime。Objc Runtime其实是一个Runtime库,它基本上是用C和汇编写的,这个库使得C语言有了面向对象的能力。runtime的强大之处在于它能在运行时创建类和对象。

    2.换肤demo下载地址

  • 相关阅读:
    RESTClient使用
    web.xml 的加载过程
    I18N、L10N、G11N
    Oracle游标示例
    MyEclipse转换Eclipse项目无法启动问题(转)
    eclipse默认文件编码
    JAVA为什么要配置环境变量,怎样配置
    TODO Auto-generated method stub
    vc6开发ActiveX并发布全攻略(三)(转)
    高效使用hibernate-validator校验框架
  • 原文地址:https://www.cnblogs.com/mancong/p/7233261.html
Copyright © 2011-2022 走看看