SwiftUI 動畫之如何檢測動畫結束并執行調用 (教程含源碼)
標簽: 隊列 java 多線程 并發編程 設計模式
實戰需求
有時候我們需要在動畫結束后執行有些操作,那如何才能判斷動畫是否結束,并進行回調呢?
本文價值與收獲
看完本文后,您將能夠作出下面的界面
截屏2020-08-13 下午5.12.06.png
看完本文您將掌握的技能
- 掌握 gesture
- 掌握 DragGesture
- 掌握 onChanged
- 掌握 onEnded
- 掌握 withAnimation
- 掌握 DispatchQueue.main.asyncAfter
基礎知識
DispatchQueue
用于管理應用程序主線程或后臺線程上串行或并行執行的任務的類。
class DispatchQueue : DispatchObject
總覽
調度隊列是FIFO隊列,您的應用程序可以以塊對象的形式向其提交任務。調度隊列可以串行或并行執行任務。提交給調度隊列的工作在系統管理的線程池上執行。除了代表應用程序主線程的調度隊列之外,系統無法保證它使用哪個線程來執行任務。
您可以同步或異步計劃工作項。當您同步安排工作項時,您的代碼將等到該項目完成執行。當您異步調度工作項時,您的代碼將繼續執行,而工作項將在其他地方運行。
重要,嘗試在主隊列上同步執行工作項會導致死鎖。
避免過多的線程創建
在設計用于并發執行的任務時,請勿調用會阻塞當前執行線程的方法。當由并發調度隊列調度的任務阻塞線程時,系統會創建其他線程來運行其他排隊的并發任務。如果有太多任務阻塞,則系統可能會耗盡您的應用程序的線程。
應用程序消耗太多線程的另一種方法是創建過多的私有并發調度隊列。因為每個調度隊列都消耗線程資源,所以創建其他并發調度隊列會加劇線程消耗問題。代替創建私有并發隊列,將任務提交到全局并發調度隊列之一。對于串行任務,請將串行隊列的目標設置為全局并發隊列之一。這樣,您可以在最小化創建線程的單獨隊列數量的同時,維護隊列的序列化行為。
withAnimation(::)
智能推薦
一、實戰需求 需要實現通過按鈕控制視圖顯示與隱藏,并且要有延遲效果,SwiftUI該如何實現? 二、本文價值與收獲 看完本文后,您將能夠作出下面的界面 三、基礎知識 1、animation(_?? 修飾器給視圖賦予動畫效果 給視圖增加動畫效果 參數: animation view里面應用的動畫類型 返回值: 封裝該視圖并將動畫應用于該視圖中 特性: 建議最好在葉子視圖使用animation而不是容...
實戰需求 SwiftUI 內功之如何將函數存儲到數組并進行調用 本文價值與收獲 看完本文后,您將能夠作出下面的界面 看完本文您將掌握的技能 掌握數組函數 掌握數組函數調用 實戰代碼...
實戰需求 SwiftUI List 設置行點擊高亮動畫效果? 本文價值與收獲 看完本文后,您將能夠作出下面的界面 看完本文您將掌握的技能 掌握background 掌握onTagGesture 掌握animation 掌握延時設置動畫 基礎知識 List 一個容器,用于顯示排列在單列中的數據行。 background(_:alignment:) 將給定視圖分層放置在該視圖之后。...
實戰需求 SwiftUI macOS 如何使用TableView制作多列表格,并且實現內嵌TextField,實現數據采集。 本文價值與收獲 看完本文后,您將能夠作出下面的界面 基礎知識 NSTableView 一組相關記錄,顯示在代表單個記錄的行中和代表那些記錄的屬性的列中。 使用教程 表格視圖以滾動視圖顯示。從macOS v10.7開始,您可以使用NSView對象(最常用的自定義對象)代替單元...
本文價值與收獲 看完本文后,您將能夠作出下面的界面 看完本文您將掌握的技能 掌握Picker基礎使用 類似alert的調用模式 獲取響應數據 學會使用ViewModifier 學會fileprivate 學會使用extention 代碼 1、主頁面代碼...
猜你喜歡
SwiftUI macOS 如何新建一個Windows窗口并顯示 教程含源碼 實戰需求 SwiftUI macOS 如何新建一個Windows窗口并顯示 ? 本文價值與收獲 看完本文后,您將能夠作出下面的界面 看完本文您將掌握的技能 掌握創建新Windows方法 實現SwiftUI原生調用 基礎知識 NSHostingController 托管SwiftUI視圖層次結構的AppKit視圖控制器。 ...
實戰需求 SwiftUI 如何繪制多行多列表格并支持滾動 本文價值與收獲 看完本文后,您將能夠作出下面的界面 看完本文您將掌握的技能 掌握 ScrollView 掌握 ForEach 基礎知識 ScrollView 一個可以滾動的視圖 滾動視圖在可滾動內容區域內顯示其內容。 主題 創建滾動視圖 1、init(Axis.Set, showsIndicators: Bool, con...
本文價值與收獲 看完本文后,您將能夠作出下面的界面 看完本文您將掌握的技能 選擇字典 下載字典 網絡查詢 代碼...
實戰需求 SwiftUI 繪圖之 繪制一組線段并動態添加Path 本文價值與收獲 看完本文后,您將能夠作出下面的界面 看完本文您將掌握的技能 掌握 Path 繪制線段 掌握 for 循環基礎使用 掌握 stroke 基礎知識 stroke(style: StrokeStyle) 返回一個新的形狀,該形狀是self的描邊副本,使用style的內容定義描邊特征。...
本文價值與收獲 看完本文后,您將能夠作出下面的界面 基礎知識 UIDatePicker.Mode.countDownTimer 顯示小時和分鐘值的模式,例如[1 | 53]。 應用程序必須將計時器設置為以適當的間隔觸發,并將日期選擇器設置為秒數記下。 代碼...