繼續(xù)上一篇 開始用Swift開發(fā)iOS 10 - 18 Search Bar 和 UISearchController ,這一篇使用 UIPageViewController 構(gòu)建介紹頁面,與使用 LaunchScreen.storyboard 的啟動頁不同。
創(chuàng)新互聯(lián)長期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為簡陽企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì),簡陽網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
類似 UINavigationController , UIPageViewController 也是一種容器類型的控制器。這種容器類型的控制器是用來管理其它多個(gè)控制器的。
如果容器內(nèi)的控制器頁面元素類似(上圖就是這種情況),可以通過一個(gè)控制器重復(fù)利用。
setViewControllers 方法是設(shè)置 UIPageViewController 管理的視圖控制器。
頁面指示就是一般在頁面下用于分辨當(dāng)前是第一個(gè)頁面的幾個(gè)小點(diǎn)。
實(shí)現(xiàn) UIPageViewControllerDataSource 協(xié)議的兩個(gè)方法: presentationCount(for:) 表示總共有幾個(gè)小點(diǎn)(頁面)。
presentationIndex(for:) 表示當(dāng)前頁面的索引。
不用默認(rèn)的頁面指示,就要把上面兩個(gè)方法刪除,然后使用 UIPageControl 。
完成類似下面:
但因?yàn)橹笆抢?RestaurantTableViewController 的 viewDidAppear 方法顯示介紹頁的,而 viewDidAppear 方法是頁面顯示后就調(diào)用一下,這樣就出現(xiàn)不停進(jìn)入介紹頁。實(shí)際上只需要第一次打開app的時(shí)顯示介紹頁就可以了。
UserDefaults 是用來管理應(yīng)用和用戶相關(guān)的設(shè)置的。也就是可以用 UserDefaults 存儲一些用戶相關(guān)的少量數(shù)據(jù),比如上面的是否看過介紹頁,也就是是否點(diǎn)擊過DONE按鈕了。
UserDefaults 也是通過單例模式進(jìn)行操作的,通過類屬性 standard 獲取單例。
完成介紹頁。學(xué)習(xí)了 UIPageViewController 和 UserDefaults 。
Beginning-iOS-Programming-with-Swift
此文是學(xué)習(xí) appcode 網(wǎng)站出的一本書 《Beginning iOS 10 Programming with Swift》 的一篇記錄
在ios的OC和Swift混合開發(fā)無非是2種,一種是在OC的項(xiàng)目中使用Swift語言開發(fā),這里就需要?jiǎng)?chuàng)建Swift文件(或者引用Swift寫的的第三方庫),另一種是在Swift項(xiàng)目中使用OC語言開發(fā),這里就需要?jiǎng)?chuàng)建OC文件,(或者引用OC寫的的第三方庫)
首先我們在一個(gè)已有的OC的項(xiàng)目中,創(chuàng)建一個(gè)Swift文件
這里Xcode就會自動提示我們?nèi)纾簣D1
Would you like to configure an Objective-C bridging header?
Adding this file to ocProjectUseSwift will create a mixed Swift and Objective-C target. Would you like Xcode to automatically configure a bridging header to enable classes to be accessed by both languages?
提示我們創(chuàng)建一個(gè)橋接的頭文件,當(dāng)我點(diǎn)擊 “ Create? Bridging Header”,Xcode就給我們自動創(chuàng)建,自動創(chuàng)建的規(guī)則是:項(xiàng)目名+ "-Bridging-Header.h" 如圖2
同時(shí)在項(xiàng)目中創(chuàng)建一個(gè)Swift文件
然后在在 targets - Build Settings - Packaging 中設(shè)置Defines Module 為YES
設(shè)置完后開始使用,怎么在oc中使用Swift的類呢?
重點(diǎn): 在文件中引用 #import "ocProjectUseSwift-Swift.h"? 記住不是我創(chuàng)建的SecondVC.swift,是“項(xiàng)目名-Swift.h"文件名 ,引入這個(gè)文件就引入了所有的Swift文件內(nèi)的類、方法、屬性
說明:這個(gè)文件是系統(tǒng)自動創(chuàng)建,自動添加所有我們創(chuàng)建的Swift的類的方法和屬性
前提是要在方法和屬性前面要加@objc 如圖3:
用@objc聲明好之后,在我們引用的是“項(xiàng)目名-Swift.h"文件名的?#import "ocProjectUseSwift-Swift.h" 內(nèi)就看到有標(biāo)記了如圖4
這里分了3塊,紅色和綠色標(biāo)記框內(nèi)是我們自己標(biāo)記的oc可用的屬性和方法,藍(lán)色框內(nèi)是系統(tǒng)自己生成的oc可以初始化方法
具體使用就在oc文件中,如圖5:
此事,在這個(gè)OC創(chuàng)建的項(xiàng)目中,我們創(chuàng)建的Swift文件怎么使用OC創(chuàng)建的類呢?
這里就用到我們創(chuàng)建的橋接頭文件了,在圖2中的橋接頭文件,引入OC的頭文件,如圖6
就這樣很簡單,所以Swift文件的類都可以使用這個(gè)OC文件內(nèi)的類了,使用起,和OC調(diào)用OC的類一樣,如如圖7和圖8
Swift的項(xiàng)目中,第一次創(chuàng)建OC的文件,此時(shí)系統(tǒng)會自動幫我們創(chuàng)建橋接頭文件,如圖9
然后就有了和圖2一樣的橋接頭文件,剩下的就和圖6一樣,在橋接頭文件內(nèi)引入頭文件,即可使用OC的類,第三方庫如果也是OC寫的,在引入的時(shí)候也自動會加這個(gè)橋接頭文件,當(dāng)然一個(gè)項(xiàng)目只能加一次,加過的就不需要加了
1:大家想使用混編的話,記住架橋。
2:當(dāng)項(xiàng)目創(chuàng)建swift的時(shí)候,“文件名-swift”里面已經(jīng)包括了Swift文件和初始化等方法,注意的一點(diǎn)就是當(dāng)OC調(diào)用Swift的時(shí)候。直接引用頭文件“文件名-swift”就可以,不要添加調(diào)用類***swift.h文件,否則文件會出現(xiàn)引用框架出現(xiàn)錯(cuò)誤。
import UIKit
class KGCFeedBackView: UIView,UITableViewDataSource,UITableViewDelegate {
}
備
1
打開本系列第一篇經(jīng)驗(yàn)中所創(chuàng)建的「PersonalAccounts」應(yīng)用。
2
在左側(cè)項(xiàng)目結(jié)構(gòu)樹中,打開「Main.storyboard」文件
3
當(dāng)打開「Main.storyboard」文件后,我們會在中間的主面板中看到一個(gè)帶有「View Controller」字樣的長的很像手機(jī)屏幕的“東西”。
這個(gè)東西就是我們“畫”應(yīng)用界面的主要“控件”。
4
默認(rèn)的,我們可以在Xcode窗口的右下方找到所有Xcode現(xiàn)有的“控件”,它們在一個(gè)叫「Show the Object library」的窗口中。所有我們需要的,都可以從這個(gè)窗口中拖到主面板中的某個(gè)「Controller」上。
PS:以后我們稱呼「Show the Object library」窗口為「對象倉庫」。
5
在對象庫中,我們可以看到有「XXXX Controller」還有「XXXX」兩種控件。(Controller默認(rèn)的以黃色的圓形唯底)
XXXX Controller,我們可以認(rèn)為其是具有一定交互行為的頁面控件。可以將在主面板中拖入的每一個(gè)Controller當(dāng)成是將來要在APP中呈現(xiàn)的應(yīng)用的頁面。
PS:拖入「Navigation Controller」時(shí)較為特殊,其會自動生成一個(gè)“主頁面”,此“主頁面”是不能拖入其他控件的。其作用是「導(dǎo)航」其他頁面。
END
制作Hello World
1
從「對象倉庫」中,拖入一個(gè)名字為「Label」的控件對象到我們現(xiàn)有的也是唯一的視圖控制器(View Controller)中。
PS:拖拽的過程中,可以體會一下對齊輔助線。
2
點(diǎn)擊拖入的Label,可以在右方看到「控件屬性欄」。在此欄中,我們可以看到當(dāng)前選中控件的所有可用屬性。
3
在「控件屬性欄」中,編輯Label的「Text」屬性為「Hello World!」。
PS:「Text」屬性有兩種模式,一種為「Plain」,另一種是「Attributed」。
通過切換這兩種模式,我們可以發(fā)現(xiàn)「Plain」模式時(shí),Label中文字的樣式是不可編輯的?!窤ttributed」模式時(shí),Label文字的模式是可以編輯的。
Beta測試 是在產(chǎn)品發(fā)布之前所進(jìn)行的軟件測試活動,它是技術(shù)測試的最后一個(gè)階段,通過了驗(yàn)收測試,產(chǎn)品就會進(jìn)入發(fā)布階段。
在iOS 8 時(shí),Apple發(fā)布 TestFlight 用于 Beta測試 。之前 TestFlight 一直是獨(dú)立用戶mobile app測試的mobile平臺,在2014年2月,Apple收購的 TestFlight 母公司Burstly?,F(xiàn)在 TestFlight 已經(jīng)集成到 iTunes Connect 中,允許開發(fā)只通過郵件地址邀請 Beta測試 用戶。
在上傳app之前,必須要在 iTunes Connect 中有 App Record 。
這一步主要選擇一下App分類的類別。
這一步主要添加截圖、app描述、app圖標(biāo)、聯(lián)系信息等信息
這邊的App Store 圖標(biāo)要求是1024x1024 pixels,不能包含隱藏元素。
回到Xcode,確認(rèn)版本數(shù)字與 iTunes Connect 中一致。
可以在Finder中直接復(fù)制 AppIcon.appiconset 目錄替代即可。
在上傳app到 iTunes Connect 之前,如要?jiǎng)?chuàng)建app包,這在Xcode 8之后已經(jīng)非常容易了。
點(diǎn)擊 Validate ,之后可能需要一段時(shí)間:
以前是最大限制2000,現(xiàn)在可以邀請10000名外部測試人員。外部測試用戶不需要事先添加。
Beginning-iOS-Programming-with-Swift
此文是學(xué)習(xí) appcode 網(wǎng)站出的一本書 《Beginning iOS 10 Programming with Swift》 的一篇記錄
全局變量的定義:var timer : Timer!
使用:timer=Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.textfieldNotification), userInfo: nil, repeats: true)
textfieldNotification是timer的方法名
銷毀:如果像OC一樣直接timer.invalidate()會崩潰,要用
guard let timer1 = self.timer
else{ return }
timer1.invalidate()
收錄: