iOS 學習筆記 UI 第十五天

2021-07-03 09:34:26 字數 3246 閱讀 3004

回顧:

繪圖兩點:

1. 繪圖**寫在哪?

a. 繼承自uiview後重寫drawrect

b. 在控制器中,**寫在uigraphicsbeginimage...和endimage之間

2. 繪圖**能寫幾種風格?

a. 使用uikit中uicolor nsstring uiimage uibezierpath中封裝完的常用繪圖方法

b. 使用底層的core graphics c函式

3. 如何重繪?

setneeddisplay

今天1. 手勢

1.1 什麼是手勢?

使用者在左觸屏動作時,一些有特定規律的移動軌跡,叫做手勢

1.2 有哪些手勢?

一次性手勢 (方法只執行一次)

tap  點 按

swipe 輕掃

連續性手勢 (方法會執行多次)

longpress 長按

pan  拖動

pinch 捏合 外擴

rotation 旋轉

1.3 手勢的本質

將使用者針對裝置螢幕的物理性動作,轉換成計算機能夠處理的資料,也就是說把動作轉換成了乙個資料存起來,所以,在機器內,手勢最總都是程式中得乙個物件,對手勢的處理,就是分析這個物件中儲存的資料,掌控使用者的動作,再來響應

1.4 如何使用手勢?

所有手勢都從 uigesturerecognize 派生而來

系統提供的手勢有如下:

uitapgesturerecognizer

uiswipegesturerecognizer

uilongpressgesutrerecognizer

uipangesturerecognizer

uipinchgesturerecognizer

uirotationgesturerecognizer

1.5 如何使用手勢

step 1:建立手勢物件

step 2:設定手勢的常用屬性

step 3:將手勢與具體的檢視繫結在一起(只有在繫結的檢視上,做該手勢時,系統才會做出響應)

1.6 uitapgesturerecognizer

一次性手勢:點 按

常用設定屬性

// 設定需要的點按次數

tapgr.numberoftabsrequired = 2;

// 設定需要的觸點個數

tapgr.numberoftouchesrequired = 1;

1.7 uiswipegesturerecognizer

一次性手勢:輕掃

重要屬性:方向 direction

注意:設定支援的方向時,不能同時把四個方向都或到一起,也不能將上下或左右同時設定,因為無法界定使用者的有一定角度的手勢,是向左右還是上下。

1.8 uilongpressgesturerecognizer

連續性手勢,長按

重要屬性:minimumpressduration

1.9 uipinchgesturerecognizer

連續性手勢:捏合 外擴

重要的可讀寫屬性:

velocity:動作的數獨 向外擴時為正值,向內捏合時為負值

scale:每一次動作發生後,兩個觸點之間的距離相對於動作起始時,兩觸點之間的距離的變化倍數

1.11 uipangesturerecognizer

連續性手勢:拖拽

重要的方法:

locationinview 獲取觸點在某個檢視中得座標點位置

1.12 uirotationgesturerecognizer

連續性手勢:旋轉

重要的屬性:

rotation:獲取旋轉後的位置相對於動作起始點便宜的弧度

2. 變形

2.1 什麼是變形?(transform)

檢視發生了位移 縮放 旋轉這樣的變化時,叫做變形

2.2 如何實現變形

通過修改檢視的transform屬性完成變化的效果

位移:translation

縮放:scale

旋**rotation

2.3 transform 屬性

型別:cgaffinetransform型別的結構體,也稱放射變換

結構體中包含了6個可變的數值和3個定值,組成了3x3的矩陣,只要修改矩陣中6個數值中得某幾個,就可以實現變形。

2.4 修改transform屬性的api

位移變換:

cgaffinetransformmaketranslation()

cgaffinetransformtranslate()

縮放變換:

cgaffinetransformmakescale()

cgaffinetransformscale()

旋轉變換:

cgaffinetransformmakrotation()

cgaffinetransformrotate()

以上方法可以分成兩大組:

帶有make:變換是 基於 「檢視最開始沒有任何變形」 的這個狀態來變形

沒有make:變換是 基於 「傳入的transform的值」 進行變形

重點注意:變形與自動布局(auto layout)是衝突的,所以在使用變形時,要關閉自動布局,否則,產生的效果無法預計

在**關閉自動布局?

隨便選擇乙個 小黃球控制器,在右側的第乙個檢查器中,將auto layout前面的核取方塊 勾掉即可

2.5 熟悉api

2.6 手勢+變形 實現檢視

2.7 如何讓多手勢並存

step 1:設定兩個需要並存的手勢的**為當前控制器

step 2:當前控制器遵守協議

step 3:控制器實現方法

注意:如果手勢新增到了imageviewshang ,要設定的userinteractionenable為yes,也就是需要開啟使用者互動功能

作業:檢視器

1》使用**的方式向view新增乙個uiimageview物件,uiimageview的大小和載入的的大小一致,所以找一張大得(推薦:使用elephant.jpg)

2》使用center屬性將imageview移動到螢幕的中間

3》使用transform屬性將imageview縮放到螢幕剛剛好能顯示下的全部

4》對iamgeview增加rotation手勢,支援的選擇

5》對iamgeview增加pinch手勢,支援的縮放

6》對imageview增加pan手勢,支援的移動

7》對imageview增加tap手勢,雙擊後,恢復到第3步

LinuxC 第十五天

靜態庫 靜態庫 要被包含到源程式中的庫 優點 執行速度快 缺點 占用系統資源比較多 使用的場合 對時間要求很高的場合 靜態庫的製作 1 把所有的源程式 c檔案 製作成目標檔案 o 檔案 gcc c mul.c o mul.o gcc c sub.c o sub.o gcc c add.c o add...

Qt第十五天

qwdialogsize.h ifndef qwdialogsize h define qwdialogsize h include namespace ui class qwdialogsize public qdialog endif qwdialogsize hqwdialogsize.cpp...

python第十五天

什麼是模組?一系列功能的集合 定義模組?建立乙個py檔案就是乙個模組,該py檔名就是模組名 怎麼使用模組?在要是用的模組檔案中通過import 模組名 來匯入模組 模組的四種方式?1 編譯執行模組所對應的py檔案,形成對應的pyc檔案 2 產生該模組自己的全域性命名空間 3 在適應該模組的全域性命名...