swift學習筆記

swift筆記

基礎知識

進制

0x代表16進制

0o代表8進制

0b代表2進制er

dict

dict: listdata
listdata.count 總數
for i in listdata{
print i.key
piint i.value
}

dict to array Array(dict.allkeys)
Array會打亂dict順序

拆包

可空類型 optional

如果一個值的聲明不是可空類型,說明他一定有值,保證了安全性

!申明爲隱式可控類型

var a:String?
隱式轉換類型 如果沒有值就會導致運行錯誤
而 可空類型不需要

as?爲可選類型 進行轉換 當轉換失敗時,值爲nil

可以不必初始化,也就是說這個變量可能爲nil
而且類型是String?類型

在輸出值是用!來解包

String

插入

var var_url=url

​ let off5=url.index(of: “:”)

​ var_url.insert(“s”, at: off5!)

輸出格式化

let format = String(format:”%.2f”,b)

對數字進行formate

 let times=String.init(format: “%02d:%02d”,mins,second)

向項目裏面添加別的庫函數

2 種辦法

cathage:

創建file 然後update

cocoaPods

pod search Snapkit

找出所有的包

然後vim profile
將內容加進去

然後pod install

xcodebuild -showsdks 查看ios版本

cocoa

storyboard

建立storyboard 然後將空間拖入需要調用的swift中 

@IBOutlet weak var

然後如果要對按鈕綁定事件, @IBAction func

在storyboard中設置 table 的數據源右鍵拖table 到最上邊的小黃點,然後選擇datasource

可以設置 多個storyboard連接,管理不同的module

設置searchDisplaycontroller

防止生成多餘的table_cell

        tableview.tableFooterView = UIView()

UItableview

如何設置響應,應該在設置delegate?

在extention 中添加 UITableViewDelegate 如果無效的話

將一個screen變成storyboard

針對第一個Demo,進行拆分,選中Contacts以及nav(高亮顯示),然後點擊Xcode的菜單欄,選擇”Editor->Refactor to Storyboard”。

設置動作變化動畫

animationWithDuration 動畫持續時間

animation 動畫閉包,在這個閉包中你可以改變UIView的各種動畫屬性。

組件位置:

改變組件位置

通過設置center的x和y來改變

設置組件位置:

        myslider=UISlider(frame: CGRect(x:20, y:380, width: 300, height: 20))

屏幕大小:

​ 375

​ 667

得到屏幕寬度:

 let fullsize=UIScreen.main.bounds.size

        let width=fullsize.width

        let height=fullsize.height

        print(width)

        print(height)

imageview

建立一個imageview 在目錄下建立個image文件夾,放入圖片

let imgArr=[UIImage(named: “1_13.jpg”)!,

UIImage(named: “1_31.jpg”)!,

UIImage(named: “imag.jpg”)!,

]

可以直接使用Assets.xcassets中的文件

可以設置輪播

圖片旋轉

  • let rad=20/180*Float(Double.pi)

myImageView.transform=CGAffineTransform(rotationAngle: CGFloat(rad))

  • 連續旋轉

    let rad=20/180*Float(Double.pi)
    myImageView.transform=myImageView.transform.rotated(by: CGFloat(rad))

  • 按照週期不停旋轉

let rotationAnim = CABasicAnimation(keyPath: "transform.rotation.z")

// // 2.設置動畫的屬性

// rotationAnim.fromValue = 0

// rotationAnim.toValue = M_PI * 2

// rotationAnim.repeatCount = MAXFLOAT

// rotationAnim.duration = 1

// // 這個屬性很重要 如果不設置當頁面運行到後臺再次進入該頁面的時候 動畫會停止

// rotationAnim.isRemovedOnCompletion = false

// // 3.將動畫添加到layer中

// myImageView.layer.add(rotationAnim, forKey: nil)

UIImageview的初始圖片
myImageView.image=UIImage( named: “angry/angry_00.jpg”)

animationDuration : 循環走一遍花費的時間

animationRepeatCount: 重複的次數

上下平移

通過center來上下平移
如果通過origin.x來平移
圖形在旋轉是會發生變化

放大和縮小

通過bounds.size.height 和bounds.size。width來放大和縮小 不然旋轉時會改變大小

設置cgrect 的界面爲全屏

button

使用tag 向button傳值

 button1.addTarget(self, action: #selector(ViewController.play(sender:)), for: .touchUpInside)
 @objc func play(sender:UIButton) {

// tag==0 start

 if sender.tag==0{
 myImageView.startAnimating()
 }
}

slider

 myslider=UISlider(frame: CGRect(x:20, y:380, width: 300, height: 20))
 myslider.addTarget(self, action: #selector(valuechanged(_sender:)), for:UIControlEvents.valueChanged)

  myslider.minimumValue=0

  myslider.maximumValue=180

webview

webView=WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))

let url=URL(string: “https://www.baidu.com“)

let request=URLRequest(url: url!)

webView.load(request)

加載html

func startLoad() {
    let url = URL(string: "https://www.example.com/")!
    let task = URLSession.shared.dataTask(with: url) { data, response, error in
        if let error = error {
            self.handleClientError(error)
            return
        }
        guard let httpResponse = response as? HTTPURLResponse,
            (200...299).contains(httpResponse.statusCode) else {
            self.handleServerError(response)
            return
        }
        if let mimeType = httpResponse.mimeType, mimeType == "text/html",
            let data = data,
            let string = String(data: data, encoding: .utf8) {
            DispatchQueue.main.async {
                self.webView.loadHTMLString(string, baseURL: url)
            }
        }
    }
    task.resume()
}

操縱網頁

goBack()
goForward()
reload()
stopLoading()

在swift中調用js方法
在js中 用 window.webkit.messageHandlers.Test.postMessage(text) 將信息傳遞給swift

  • WKScriptMessageHandler 將網頁中的js資料傳遞過來
  • wkuiDelegate 將alter窗口攔截下來
    在swift中用

讀取文件

  • 讀取圖片
    需要將圖片文件夾添加在沙盒中
    然後路徑讀取
  • 讀取plist
    從最原始的路徑開始讀
    let home=NSHomeDirectory() as NSString
    let arrayPath=home.strings(byAppendingPaths: [“tom.list”])
  • 從main沙盒路徑讀取
    undle 的全局路徑
    /Users/fanjialiang2401/Library/Developer/CoreSimulator/Devices/F11FF9DC-A17A-4400-B7B7-BA8E33B4AE6B/data/Containers/Bundle/Application/C4CC4002-3574-48D7-ACBE-DB6A486510BB/Tom.app

  • 從當前目錄下讀取

    let budledir=Bundle.main.path(forResource: “tom”, ofType: “plist”)
    var listdata=NSDictionary(contentsOfFile: budledir!)

bug整理

  1. 當storyboard和lable綁定時,不能改名字,否則 會報錯:setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key feel_like.’

湯姆貓的實現思路

加載plist,從plist中讀取dict
然後給每個button設置label,然後從 dict[label]中讀取圖片的個數和文件的路徑

然後將圖片加載到imageview中,來播放,播放的時間用animationDuration來設置

在imageview播放期間,如果點擊了其他的按鈕,則返回,避免破壞播放

最終的項目

  1. 圖片瀏覽器

​ 功能要求:

​ 根據拖動滑動條來改變圖片的瀏覽順序

​ 根據圖片的改變動態改變圖片的文字描述

​ 增加一個滑動條實現圖片的放大和縮小

​ 實現夜間模式和白天模式的切換

  1. 天氣預報

    功能要求:

    全國一些城市的天氣預報顯示

    通過搜索輸入框來進行天氣查詢,可支持全球3萬多城市的天氣查詢

    支持拼音查詢,漢字查詢

    支持詳細內容查詢,點擊cell跳轉進入詳細內容的顯示,有風速,風向,體感溫度,實際溫度,溼度,氣壓等詳細數據的顯示

  2. 個人創新項目,私人fm

    實現音樂播放器功能:歌曲名,演唱者,圖片顯示,切換歌曲,拖動進度條功能

    採用豆瓣FM接口,可以向用戶隨機推薦歌曲。如果不喜歡即可切換下一首

  3. 圖片排列

    根據選擇的行數不同來排列不同的圖片

    實現視頻上的要求

  4. 瀏覽器,訪問蘋果官網的首頁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章