日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态更新App的图标(AppIcon)

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态更新App的图标(AppIcon) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

序言

????????隨著時代的進步,人的生活多元化。一些公司的 App 也隨著人的生活改變而進行適和情景的變化。比如,本公司的 App 在四月時是本公司成立 4 周年的生日,那就想在本公司 AppIcon 上添加一個圣誕帽。第一種方法: 在 App 的工程中,替換原始的 AppIcon ,再提交 AppStore 進行審核。這種方法不說麻煩,而且耗費時間長。第二種:在 App 中動態更新 AppIcon 。 這種方法直接、快速、適合即時應用。


1、本博客介紹方法實現的效果圖如下


2、 重點知識點的介紹

@interface UIApplication (UIAlternateApplicationIcons) // If false, alternate icons are not supported for the current process. @property (readonly, nonatomic) BOOL supportsAlternateIcons NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));// Pass `nil` to use the primary application icon. The completion handler will be invoked asynchronously on an arbitrary background queue; be sure to dispatch back to the main queue before doing any further UI work. - (void)setAlternateIconName:(nullable NSString *)alternateIconName completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));// If `nil`, the primary application icon is being used. @property (nullable, readonly, nonatomic) NSString *alternateIconName NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2)); @end

1 / supportsAlternateIcons 函數

????? 該函數是判斷設備是否支持備用 AppIcon 的功能。該功能的使用條件是設備的系統必須是 iOS 10.3 以上的版本。

2 / alternateIconName 參數

????? 該參數是一個只讀屬性的參數,如果該參數為 nil 時,那App 就會使用默認的AppIcon 。否則,App 使用的是備用AppIcon ,那么 alternateIconName 獲得的結果就是App 正在使用的備用AppIcon的名子。

3 / setAlternateIconName: completionHandler: 函數

????? 該函數是執行AppIcon 圖標替換的功能。在進行替換時 App 的系統會彈出一個提示讓你確定是否變更AppIcon 。如果,要自動變更AppIcon ,那么這個提示就不能出現。對于如何去掉這個提示,后面介紹。


3、使用備用AppIcon需要在工程的 info.plist 文件中進行配置,配置如下:

1、添加流程
  • 我們在工程的 Info.plist 文件中添加 Icon files(iOS 5)key 。該 key 的類型(Type)為 Dictionary
  • Icon files(iOS 5) 對應的字典,包含 2 個對象分別是: Primary IconNewsstand Icon。 這兩個對象的類型也是 * Dictionary*
  • 我們要使用備用的AppIcon ,那么我們就要在 Icon files(iOS 5) 對應的字典中,添加一個對象 CFBundleAlternateIcons 對象,該對象的類型是字典(Dictionary)。
  • 我們在CFBundleAlternateIcons 對象中添加備用*AppIcon 的圖像對象。如上圖 Icon1Icon2 所示,這兩個對象的類型也是字典。
  • 我們要在添加的AppIcon對象中在添加一個 CFBundleIconFiles 的對象,該對象的類型是數組(Array)。
  • CFBundleIconFiles 的對象中添加AppIcon 的圖像文件名字為元素,該元素的類型是 String,以便后期使用。
2、參數介紹
  • Primary Icon ?是默認 AppIcon 的對象。該對象包含 *Icon already includes gloss effectsIcon files 兩個對象。 *Icon already includes gloss effects 是一個布爾類型,它表示AppIcon 是否是高光狀態。Icon files 是一個數組對象,它包含默認的AppIcons 的文件名字對象,對象類型是字符串(String)。
  • CFBundleAlternateIcons ??備用AppIcon 可能有好幾個,那么CFBundleAlternateIcons 包含的對象就不只一個。我們介紹其中一個例如 Icon1 包含 CFBundleIconFiles 一個存放AppIcon 圖像的數組。數組內是各個AppIcon 文件的名字。
  • Newsstand Icon ?? 這是報刊類 Newsstand App 的圖標設置。該對象包含 Binding edgeIcon filesBinding type 三個對象。Binding edge 是一個字符串對象,它的作用是設置Newsstand Icon 的位置,可選類型有 leftrightbottomIcon files 是一個數組對象,它里面存放圖像的文件名字。Binding type 是設置Newsstand Icon 歸屬的類型,類型可選有 Magazine*Newspaper


4、 核心代碼

#pragma mark Change 'AppIcon' -(void) changeAppIcon:(NSString *) iconName {// TODO: Get the App itselfUIApplication * application = [UIApplication sharedApplication];// TODO: Determine whether the device supports' AlternateIcons'/*** AlternateIcons : 擴展備用圖標。* 使用條件: ios10.3 以上的設備*/if ([application supportsAlternateIcons]) {// Change the 'AppIcon'[application setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {// Change the abnormal result of 'AppIcon'NSLog(@"%@",error);}];} }

App 程序中調用上面的函數,就可實現AppIcon的變更。注意,當你調用時,系統會彈出一個提示,讓你確定進行AppIcon 的變更操作,確定后AppIcon 才會替換。如下所示:

5、清除變更 AppIcon 時系統彈出框

???????? 我們知道系統的彈出框是由 UIAlertController 來實現的,它屬于一個控制器。在彈出的時候會調用 presentViewController:animated:completion: ? 函數。那我們可以通過這個方法來阻止彈框的彈出。由于蘋果系統的不開放性,我們也沒發更改這個函數。目前,方法就是利用運行時,用我們創建的一個方法來替換這個方法。在我們的方法中來阻止彈框的彈出。

1、核心代碼

該段代碼可放在繼承的控制器中或者在控制器中直接寫。導入運行時的函數庫 #import < objc/runtime.h >

#pragma mark 彈窗的清楚 +(void)load {Method presentM = class_getInstanceMethod(self.class, @selector(presentViewController:animated:completion:));Method presentAlternativeM = class_getInstanceMethod(self.class, @selector(clearPresentViewController:animated:completion:));// 方法的切換method_exchangeImplementations(presentM, presentAlternativeM); }#pragma mark 清楚處理方法 -(void)clearPresentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion{// 跳轉頁面的類型if ([viewControllerToPresent isKindOfClass:[UIAlertController class]]) {UIAlertController * alertVctl = (UIAlertController *) viewControllerToPresent ;if (alertVctl.title == nil && alertVctl.message == nil) {return ;}}// 頁面回調[self clearPresentViewController:viewControllerToPresent animated:flag completion:completion]; }

6、代碼下載

  • 代碼下載,可在博客下留言和郵箱。
  • 可添加QQ:群號:185341804 (成功QQ吧),聯系群主獲取。

總結

以上是生活随笔為你收集整理的动态更新App的图标(AppIcon)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。