国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

一步一步實(shí)現(xiàn)iOS主題皮膚切換效果

2019-10-21 18:51:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例為大家分享了iOS主題皮膚切換代碼,供大家參考,具體內(nèi)容如下

1. 主題皮膚功能切換介紹
主題切換就是根據(jù)用戶設(shè)置不同的主題,來(lái)動(dòng)態(tài)改變用戶的界面,通常會(huì)改變navigationBar背景圖片、tabBar背景圖片、tabBar中的按鈕的圖片和選中的背景圖片、navigationItem.title 標(biāo)題的字體顏色、UI中其他元素控件

2.項(xiàng)目目錄結(jié)構(gòu)及實(shí)現(xiàn)效果截圖

iOS主題皮膚切換,iOS皮膚切換

iOS主題皮膚切換,iOS皮膚切換

iOS主題皮膚切換,iOS皮膚切換
 

iOS主題皮膚切換,iOS皮膚切換

iOS主題皮膚切換,iOS皮膚切換

iOS主題皮膚切換,iOS皮膚切換

3. 具體實(shí)現(xiàn)步驟

1.將image文件夾(group)和 Skins拖入到項(xiàng)目工程中的資源文件夾中
2.創(chuàng)建BaseViewController
3.配置theme.plist
4.事項(xiàng)項(xiàng)目所需的基本框架供能,并實(shí)現(xiàn)主題的tableView功能
5.創(chuàng)建主題管理器:ThemeManager
6.自定義ThemeTabBarItem 控件
7.創(chuàng)建UI工廠: UIFactory
8. 實(shí)現(xiàn)tableView中的didSelected事件完成主題切換
9.記錄用戶選擇的主題,以便用戶下次啟動(dòng)時(shí)是上次設(shè)置的主題

1.創(chuàng)建BaseViewController

#import <UIKit/UIKit.h> @interface BaseViewController : UIViewController  - (void) reloadThemeImage; @end 

 

#import "BaseViewController.h"  #import "ThemeManager.h" #import "NotificationMacro.h"  @interface BaseViewController ()  @end  @implementation BaseViewController - (id) init {  if (self == [super init]) {   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(themeChangedNotfication:) name:kThemeChangedNotification object:nil];  }    [self reloadThemeImage];  return self; }  - (void)viewDidLoad {  [super viewDidLoad];  [self reloadThemeImage]; }  - (void)didReceiveMemoryWarning {  [super didReceiveMemoryWarning];  // Dispose of any resources that can be recreated. }  - (void) themeChangedNotfication:(NSNotification *)notification {  [self reloadThemeImage]; }  - (void) reloadThemeImage {  ThemeManager * themeManager = [ThemeManager sharedThemeManager];    UIImage * navigationBackgroundImage = [themeManager themeImageWithName:@"navigationbar_background.png"];  [self.navigationController.navigationBar setBackgroundImage:navigationBackgroundImage forBarMetrics:UIBarMetricsDefault];    UIImage * tabBarBackgroundImage = [themeManager themeImageWithName:@"tabbar_background.png"];  [self.tabBarController.tabBar setBackgroundImage:tabBarBackgroundImage]; } @end 

2. 實(shí)現(xiàn)AppDelegate

#import "AppDelegate.h"  #import "MainViewController.h" #import "ThemeManager.h" #import "NotificationMacro.h"  @interface AppDelegate ()  @end  @implementation AppDelegate   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  [self initUserDefaultConfig];    MainViewController * rootViewController = [[MainViewController alloc] init];  self.window.rootViewController = rootViewController;    return YES; }   - (void) initUserDefaultConfig {  NSString * themeName = [[NSUserDefaults standardUserDefaults] objectForKey:kThemeNameKey];  ThemeManager * themeManager = [ThemeManager sharedThemeManager];  themeManager.themeName = themeName; }</span></span> 

 

<span style="font-weight: normal;"><span style="font-weight: normal;">#import "MainViewController.h"  #import "HomeViewController.h" #import "MessageViewController.h" #import "MineViewController.h"  #import "UIFactory.h"   @interface MainViewController ()  @end  @implementation MainViewController  - (id) init {  if (self = [super init]) {   [self initTabBarUI];  }    return self; }  - (void)viewDidLoad {  [super viewDidLoad];   }  - (void)didReceiveMemoryWarning {  [super didReceiveMemoryWarning]; }   - (void) initTabBarUI {  // 主頁(yè)  HomeViewController * homeViewController = [[HomeViewController alloc] init];  UINavigationController * homeNavigationController = [[UINavigationController alloc] initWithRootViewController:homeViewController]; // UITabBarItem * homeTabBarItem = [[UITabBarItem alloc] initWithTitle:@"主頁(yè)" image:[UIImage imageNamed:@"tabbar_home"] selectedImage:[UIImage imageNamed:@"tabbar_home_selected"]];  UITabBarItem * homeTabBarItem = [UIFactory createTabBarItemWithTitle:@"主頁(yè)" imageName:@"tabbar_home" selectedImage:@"tabbar_home_selected"];  homeNavigationController.tabBarItem = homeTabBarItem;    // 消息(中心)  MessageViewController * messageViewController = [[MessageViewController alloc] init];  UINavigationController * messageNavigationController = [[UINavigationController alloc] initWithRootViewController:messageViewController]; // UITabBarItem * messageTabBarItem = [[UITabBarItem alloc] initWithTitle:@"消息" image:[UIImage imageNamed:@"tabbar_message_center"] selectedImage:[UIImage imageNamed:@"tabbar_message_center_selected"]];  UITabBarItem * messageTabBarItem = [UIFactory createTabBarItemWithTitle:@"消息" imageName:@"tabbar_message_center" selectedImage:@"tabbar_message_center_selected"];  messageNavigationController.tabBarItem = messageTabBarItem;    // 我  MineViewController * mineViewController = [[MineViewController alloc] init];  UINavigationController * mineNavigationController = [[UINavigationController alloc] initWithRootViewController:mineViewController]; // UITabBarItem * mineTabBarItem = [[UITabBarItem alloc] initWithTitle:@"我" image:[UIImage imageNamed:@"tabbar_profile"] selectedImage:[UIImage imageNamed:@"tabbar_profile_selected"]];  UITabBarItem * mineTabBarItem = [UIFactory createTabBarItemWithTitle:@"我" imageName:@"tabbar_profile" selectedImage:@"tabbar_profile_selected"];      mineNavigationController.tabBarItem = mineTabBarItem;  NSArray * viewControllers = @[homeNavigationController, messageNavigationController, mineNavigationController];  self.viewControllers = viewControllers; }   @end 

3. 創(chuàng)建主題管理器

#import <Foundation/Foundation.h> #import <UIKit/UIKit.h>  @interface ThemeManager : NSObject  @property (nonatomic, copy) NSString * themeName;   // 主題名字 @property (nonatomic, retain) NSDictionary * themePlistDict; // 主題屬性列表字典  + (ThemeManager *) sharedThemeManager;  - (UIImage *) themeImageWithName:(NSString *)imageName; @end</span></span> 

 

<span style="font-weight: normal;"><span style="font-weight: normal;">#import <Foundation/Foundation.h> #import <UIKit/UIKit.h>  @interface ThemeManager : NSObject  @property (nonatomic, copy) NSString * themeName;   // 主題名字 @property (nonatomic, retain) NSDictionary * themePlistDict; // 主題屬性列表字典  + (ThemeManager *) sharedThemeManager;  - (UIImage *) themeImageWithName:(NSString *)imageName; @end #import "ThemeManager.h" #import "NotificationMacro.h" static ThemeManager * sharedThemeManager;  @implementation ThemeManager  - (id) init {  if(self = [super init]) {   NSString * themePath = [[NSBundle mainBundle] pathForResource:@"theme" ofType:@"plist"];   self.themePlistDict = [NSDictionary dictionaryWithContentsOfFile:themePath];   self.themeName = nil;  }    return self; }  + (ThemeManager *) sharedThemeManager {  @synchronized(self) {   if (nil == sharedThemeManager) {    sharedThemeManager = [[ThemeManager alloc] init];   }  }    return sharedThemeManager; }  // Override 重寫(xiě)themeName的set方法 - (void) setThemeName:(NSString *)themeName {  _themeName = themeName; }  - (UIImage *) themeImageWithName:(NSString *)imageName {  if (imageName == nil) {   return nil;  }    NSString * themePath = [self themePath];  NSString * themeImagePath = [themePath stringByAppendingPathComponent:imageName];  UIImage * themeImage = [UIImage imageWithContentsOfFile:themeImagePath];    return themeImage; }  // 返回主題路徑 - (NSString *)themePath {  NSString * resourcePath = [[NSBundle mainBundle] resourcePath];  if (self.themeName == nil || [self.themeName isEqualToString:@""]) {   return resourcePath;  }      NSString * themeSubPath = [self.themePlistDict objectForKey:self.themeName]; // Skins/blue  NSString * themeFilePath = [resourcePath stringByAppendingPathComponent:themeSubPath]; // .../Skins/blue    return themeFilePath; } @end 

4. 創(chuàng)建主題按鈕 ThemeTabBarItem

#import <UIKit/UIKit.h> @interface ThemeTabBarItem : UITabBarItem  @property (nonatomic, copy) NSString * imageName; @property (nonatomic, copy) NSString * selectedImageName;   - (id) initWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImage:(NSString *)selectedImageName;  @end </span></span> 

 

<span style="font-weight: normal;"><span style="font-weight: normal;">#import "ThemeTabBarItem.h" #import "ThemeManager.h" #import "NotificationMacro.h"  @implementation ThemeTabBarItem  // 初始化時(shí)注冊(cè)觀察者 - (id) init {  if (self = [super init]) {   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(themeChangedNotification:) name:kThemeChangedNotification object:nil];  }    return self; }  - (id) initWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImage:(NSString *)selectedImageName {  if (self = [self init]) {   self.title = title;   self.imageName = imageName;   // 此時(shí)會(huì)調(diào)用[self setImageName:imageName] ---> [self reloadThemeImage] --->[self setImage:image]   self.selectedImageName = selectedImageName;// 此時(shí)會(huì)調(diào)用[self setSelectedImageName:selectedImageName];  }    return self; }   #pragma mark - #pragma mark - Override Setter - (void) setImageName:(NSString *)imageName {  if (_imageName != imageName) {   _imageName = imageName;  }    [self reloadThemeImage]; }  - (void) setSelectedImageName:(NSString *)selectedImageName {  if (_selectedImageName != selectedImageName) {   _selectedImageName = selectedImageName;  }    [self reloadThemeImage]; }    // 主題改變之后重新加載圖片 - (void)themeChangedNotification:(NSNotification *)notification {  [self reloadThemeImage]; }  - (void)reloadThemeImage {  ThemeManager * themeManager = [ThemeManager sharedThemeManager];    if (self.imageName != nil) {   UIImage * image = [themeManager themeImageWithName:self.imageName];   [self setImage:image];  }    if (self.selectedImageName != nil) {   UIImage * selectedImage = [themeManager themeImageWithName:self.selectedImageName];   [self setSelectedImage:selectedImage];  } }  - (void) dealloc {  [[NSNotificationCenter defaultCenter] removeObserver:self]; } 

5. 創(chuàng)建UI工廠

#import <Foundation/Foundation.h> #import <UIKit/UIKit.h>  @interface UIFactory : NSObject  + (UITabBarItem *) createTabBarItemWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImage:(NSString *)selectedImageName;   @end</span></span> 
<span style="font-weight: normal;"><span style="font-weight: normal;">#import <Foundation/Foundation.h> #import <UIKit/UIKit.h>  @interface UIFactory : NSObject  + (UITabBarItem *) createTabBarItemWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImage:(NSString *)selectedImageName;   @end #import "UIFactory.h"  #import "ThemeTabBarItem.h" @implementation UIFactory  + (UITabBarItem *) createTabBarItemWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImage:(NSString *)selectedImageName {  ThemeTabBarItem * themeTabBarItem = [[ThemeTabBarItem alloc] initWithTitle:title imageName:imageName selectedImage:selectedImageName];    return themeTabBarItem; } @end 

6. 實(shí)現(xiàn)選中單元格的事件

#import "BaseViewController.h"  @interface MineViewController : BaseViewController <UITableViewDelegate, UITableViewDataSource>   @property (weak, nonatomic) IBOutlet UITableView *tableView;  @property (nonatomic, retain) NSMutableArray * themeDataSource; @end 

 

#import "BaseViewController.h"  @interface MineViewController : BaseViewController <UITableViewDelegate, UITableViewDataSource>   @property (weak, nonatomic) IBOutlet UITableView *tableView;  @property (nonatomic, retain) NSMutableArray * themeDataSource; @end #import "MineViewController.h"  #import "ThemeManager.h" #import "NotificationMacro.h"  @interface MineViewController ()  @end  @implementation MineViewController  - (void)viewDidLoad {  [super viewDidLoad];  self.title = @"我";    ThemeManager * themeManager = [ThemeManager sharedThemeManager];  _themeDataSource = [NSMutableArray arrayWithArray:themeManager.themePlistDict.allKeys]; }  - (void)didReceiveMemoryWarning {  [super didReceiveMemoryWarning];  // Dispose of any resources that can be recreated. }    #pragma mark - #pragma mark - UITableViewDelegate - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {   return self.themeDataSource.count; }  - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  static NSString * Identifier = @"Cell";  UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:Identifier];  if (cell == nil) {   cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Identifier];  }    NSString * text = self.themeDataSource[indexPath.row];  cell.textLabel.text = text;    ThemeManager * themeManager = [ThemeManager sharedThemeManager];  NSString * currentTheme = themeManager.themeName;  if (currentTheme == nil) {   currentTheme = @"默認(rèn)";  }  if ([currentTheme isEqualToString:text]) {   cell.accessoryType = UITableViewCellAccessoryCheckmark;  } else {   cell.accessoryType = UITableViewCellAccessoryNone;  }    return cell; }  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {    ThemeManager * themeManager = [ThemeManager sharedThemeManager];  NSString * themeName = self.themeDataSource[indexPath.row];    if ([themeName isEqualToString:@"默認(rèn)"]) {   themeName = nil;  }    // 記錄當(dāng)前主題名字  themeManager.themeName = themeName;  [[NSNotificationCenter defaultCenter] postNotificationName:kThemeChangedNotification object:nil];      // 主題持久化  NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];  [userDefaults setObject:themeName forKey:kThemeNameKey];  [userDefaults synchronize];    // 重新加載數(shù)據(jù)顯示UITableViewCellAccessoryCheckmark 顯示選中的對(duì)號(hào) v  [self.tableView reloadData]; }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到IOS開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 锦州市| 抚顺市| 盱眙县| 恩施市| 三门峡市| 景泰县| 新泰市| 眉山市| 巩义市| 东海县| 页游| 垫江县| 辽源市| 丹阳市| 亚东县| 长岭县| 天等县| 静海县| 北碚区| 循化| 克什克腾旗| 临沂市| 滨海县| 台中县| 任丘市| 二手房| 阿勒泰市| 历史| 平武县| 平阳县| 阳高县| 女性| 夏津县| 囊谦县| 秭归县| 阜城县| 将乐县| 襄樊市| 太原市| 普安县| 宜宾市|