APP切换皮肤

作者: Mccc_ | 来源:发表于2017-07-25 11:44 被阅读322次

一.需求说明

当一个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 {
    
    // 防止子类调用super导致多次交换
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Method imageNameddd = class_getClassMethod([UIImage class], @selector(imageNamed:));
        Method MC_imageNamed = class_getClassMethod([UIImage class], @selector(MC_imageNamed:));
        method_exchangeImplementations(imageNameddd, MC_imageNamed);
    });
}

+ (nullable UIImage *)MC_imageNamed:(NSString *)name {
    // 用户的权限
    NSInteger roleId = 1;

    NSString * string;
    UIImage * image;
    
    // 生成image的方法一定要用自己写的方法MC_imageNamed. 不能用imageNamed.会导致循环使用.

    if (roleId == 0) {
        image = [UIImage MC_imageNamed:name];
    } else {
        string = [NSString stringWithFormat:@"%@_vip",(NSString *)name];
        image = [UIImage MC_imageNamed:string];
        
        // 如果图片不存在的处理
        if (!image) {
            image = [UIImage MC_imageNamed:name];
        }
    }
    return image;
}

@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的强大之处在于它能在运行时创建类和对象。

  1. Objective-C神奇方法 - load
    load 方法会在加载类的时候就被调用,也就是 ios 应用启动的时候,就会加载所有的类,就会调用每个类的 + load 方法。是在main函数之前执行.

3.换肤demo下载地址

相关文章

  • APP切换皮肤

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

  • iOS 动态更换App图标

    该功能应用的场景 1、白天/夜间模式切换,在切换App主色调同时切换App图标。 2、各类皮肤主题(淘宝就可换肤)...

  • 一键换肤

    常见的APP很多都要切换皮肤的功能,到了晚上,就换成黑色背景,另外用户也可以手动切换皮肤。一直好奇是怎么实现的,后...

  • iOS皮肤切换方案

    iOS皮肤切换方案 iOS皮肤切换方案

  • 皮肤切换

    提供资讯、信息类的App一般都有白天和黑夜两种阅读模式 现有项目中皮肤切换思路1、资源文件(图片、plist色板值...

  • iOS 如何动态切换 APP 的主题

    主题的切换就是可以增强用户体验、结合运营活动的一个点:譬如 QQ 的夜间模式,节日里电商 APP 的皮肤切换...

  • Android动态皮肤学习总结

    背景 目前很多app都具有换肤功能,用户可以根据需要切换不同的皮肤,为使我们的App支持换肤功能,给用户提供更好的...

  • Android App插件式换肤实现方案

    背景 目前很多app都具有换肤功能,用户可以根据需要切换不同的皮肤,为使我们的App支持换肤功能,给用户提供更好的...

  • Android 实现切换主题皮肤功能

    简介 正文 首先我们先来做个简单的一键切换主题的功能。查看代码如下: 但是这种情况下呢,一键切换皮肤,app需要退...

  • 02_linux 常用命令

    切换目录命令cd: cd app 切换到app目录 cd..切换到上一层目录 cd /切换到系统根目录...

网友评论

    本文标题:APP切换皮肤

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