android 抽屉新热榜 splash,【IOS】模仿quot;抽屉新热榜quot;动态启动页YFSplashScreen,iosyfsplashscreen...
【IOS】模仿"抽屜新熱榜"動態啟動頁YFSplashScreen,iosyfsplashscreen
IOS最好要設置系統默認啟動頁面,不然進入應用就會突然閃現黑色畫面
下圖是我們要實現的效果:
總體思路:設置一個系統默認啟動頁面,在進入didFinishLaunchingWithOptions時,
給Window添加自定義啟動頁,其初始畫面和系統啟動頁一樣。
可在自定義啟動頁實現一些動畫,動畫結束后,將自定義啟動頁移除。
一.設置系統默認啟動頁
現在,新建項目會自動生成LaunchScreen.storyboard啟動頁面文件。
來到項目根目錄 ?點擊General ?找到以下:
發現除了直接設置Launch Screen File,還能夠設置Launch Image Source來實現添加啟動頁面。
所以我們來使用這種方式來實現吧。使用Assets.xcassets添加圖片,
1.LaunchScreen.storyboard我們用不到了,可以將其刪除。同時第三行將Launch Screen File設為空。
2.第二行,點擊User Asset Cattalog ?-> Migrate: ?此時Luanch Images Source會變為 ?Brand Assets
但這不是我們需要的。因此,點擊右邊的箭頭,進入Assets.xcassets, 在AppIcon那邊右鍵,選中
App Icons&Launch Images->New IOS Launch Images,此時在右側會出現很多可填入圖片的框框。
之后返回將第二行選中LuanchImage,設置完成后結果如下圖所示。
現在給剛才新建的LaunchImage添加圖片就能夠展示系統默認的啟動畫面了。
網上很多教程都是到此為止,到底該如何添加圖片卻不知道了。如何設置圖片請往下看。
(導致的結果就是添加了圖片后出現上下都有大塊黑邊的情況或者沒有圖片展示)
二.設置系統啟動頁圖片
LaunchImage里面的內容如下,并且我已經把對應的圖片分辨率標注出來了。
(為了適配不同大小的屏幕,除了Landscape橫屏,總共需要五張不同分辨率的圖,已經用顏色區分了)
然后是不同尺寸設備所使用的圖片(這個名稱只是為了更好的對應起來,將圖片放入LaunchImage對應位置)
這里的邏輯坐標系(分辨率)大小可以理解為獲取到的 [UIScreen mainScreen].bounds.size大小.
所以將上述5種分辨率圖片對應放入,就能夠實現正常的系統默認啟動頁了。
(注意:不將這些添加到項目里,直接拖動到LaunchImage的對應位置就可以了,在目錄下
Assets.xcassets/LaunchImage.launchimage你能看到自動生成的對應特定名稱的圖片,共7張)
三.自定義頁面UIView
1.設置背景
系統默認啟動畫面結束之后,顯示的就是我們添加在Window上的自定義UIView。
為了畫面的流暢性,背景依然需要設置為和啟動畫面一樣的圖片。
針對不同的設備,系統默認的啟動畫面會顯示不同的圖片,如果我們手動去判斷賦值UIView背景,未免有些麻煩。
我們可以通過NSBundle中的infoDictionary的"UILaunchImages"獲取當前使用的LaunchImage。
上述獲取到的為一個字典數組DicArrays,其數量會隨著你添加的LaunchImage圖片而改變。
這里我列出適配所有屏幕(DicArrays數量為4)時獲取到的DicArays. ?如下表格:
因此我們只需遍歷出對應大小和方向的UILanuchimageName的值就可以了。
-(NSString *)getCurrentLaunchImageNameForOrientation:(UIInterfaceOrientation)orientation{
NSString*currentImageName =nil;
CGSize viewSize=self.bounds.size;
NSString* viewOrientation = @"Portrait";if(UIInterfaceOrientationIsLandscape(orientation)){
viewSize=CGSizeMake(viewSize.height, viewSize.width);
viewOrientation= @"Landscape";
}
NSArray*imageDicts = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];for (NSDictionary * dic inimageDicts) {
CGSize imageSize= CGSizeFromString(dic[@"UILaunchImageSize"]); //將字符串轉換為Size
NSString*orientation = dic[@"UILaunchImageOrientation"]; //取得方向if(CGSizeEqualToSize(viewSize, imageSize) &&[orientation isEqualToString:viewOrientation]){
currentImageName= dic[@"UILaunchImageName"];
}
}returncurrentImageName;
}
獲取到名稱后,就可以直接通過該名稱給UIImage賦值了。
2.設置圖標和名稱
有沒有注意到上面的示意圖里,"抽屜新熱榜"的圖標和文字是一直存在的,之后背景色改變為其他圖片。
我的想法是將抽屜新熱榜的圖標和文字覆蓋在最上層。在系統默認啟動圖完成后,視圖的結構如圖所示。
(紅圈內,從左到右分別是頂層的圖片+文字,進行動畫的UIImageView, UIView本身的背景圖片)
由此可知,我們需在默認的UIVIew最頂端添加和背景圖片離位置一模一樣的圖標和文字,以保證從系統的LaunchImage跳轉到自定義頁面,其中的內容是不會變化的。然而啟動畫面有多種尺寸,所以需要將圖標按照一定的比例添加到UIView上。所以啟動畫面最好也要以某一比例來進行內部的圖標、文字設計。
但是由于沒有美工,我想到了一個辦法。直接先將圖標、文字、背景按照一定比例布局到UIView上,然后給不同模擬器截圖。
(我的布局: ?正方形圖標寬度、高度均為屏幕寬度的1/6 ? ?圖標y值為屏幕高度1/7)
在4、4.7、5、5.5英寸模擬器上,切換到最大窗口(Command+1)后 ?截圖(Command+S)就能夠獲取想要的比例
在3.5英寸模擬器上,Command+ 1 為: 640 * 960 ? ? ? ?Command+3 為: ?320*480
這樣不但得到了啟動圖片,你也有了最上層圖片和文字的布局。
3.網絡請求和沙盒保存
現在整體做好了,還有一個功能,是在客戶端內可更換網絡圖片,在下次重新進入應用后生效。
所以涉及到了網絡請求NSURLSession和沙盒,這里省略并作一些記錄。
使用TaskDownloadSession等相關對象
a.實現了block,就無法進入協議中,而delegate的協議可以進行恢復下載、實時進度等控制.
b.實現進度控制的協議里 totalBytesExpectedToWrite為-1?解決辦法:
NSMutableURLRequest *request;
[request setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];
見StackOverFlow :?MBProgressHUD with NSURLConnection
源碼以及說明詳見GitHub:YFSplashScreen
http://www.dengb.com/IOSjc/1134548.htmlwww.dengb.comtruehttp://www.dengb.com/IOSjc/1134548.htmlTechArticle【IOS】模仿抽屜新熱榜動態啟動頁YFSplashScreen,iosyfsplashscreen IOS最好要設置系統默認啟動頁面,不然進入應用就會突然閃現黑色畫面 下圖是...
總結
以上是生活随笔為你收集整理的android 抽屉新热榜 splash,【IOS】模仿quot;抽屉新热榜quot;动态启动页YFSplashScreen,iosyfsplashscreen...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: grpc流式传输示例(c++)
- 下一篇: 客户关系管理软件是什么?企业为什么需要客