日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
創(chuàng)新互聯(lián)IOS教程:添加手勢互動操作

概覽

手勢修飾符用于處理用戶輸入事件 (例如,觸控) 處理所需的所有邏輯,并識別這類事件何時與已知的手勢模式 (例如,長按或旋轉) 匹配。在識別到模式時,SwiftUI 會運行一個回調,供你用來更新視圖狀態(tài)或執(zhí)行操作。

將手勢修飾符添加到視圖

你添加的每個手勢都會應用于視圖層次結構中的特定視圖。若要識別特定視圖上的手勢事件,請創(chuàng)建并配置相關手勢,然后使用 gesture(_:including:) (英文) 修飾符:

 struct ShapeTapView: View {  var body: some View {  let tap = TapGesture()  .onEnded { _ in  print("View tapped!")  }    return Circle()  .fill(Color.blue)  .frame(width: 100, height: 100, alignment: .center)  .gesture(tap)  } }

響應手勢回調

每當手勢狀態(tài)發(fā)生變化時,SwiftUI 都會根據(jù)你添加到手勢修飾符的回調反饋給你的代碼。手勢修飾符提供三種方式來接收更新:updating(_:body:) (英文)、onChanged(_:) (英文) 和 onEnded(_:) (英文)。

更新瞬時 UI 狀態(tài)

若要在手勢發(fā)生變化時更新視圖,請將 GestureState (英文) 屬性添加到你的視圖,并在 updating(_:body:) (英文) 回調中更新它。SwiftUI 會在識別到手勢以及手勢的值發(fā)生變化時立即調用更新回調。例如,SwiftUI 會在放大手勢一開始便調用更新回調,然后在每次放大值發(fā)生變化時再次調用回調。SwiftUI 在用戶結束或取消手勢時不會調用更新回調。這時,手勢狀態(tài)屬性會自動將其狀態(tài)重置為初始值。

例如,若要創(chuàng)建一個在用戶執(zhí)行長按時改變顏色的視圖,請?zhí)砑右粋€手勢狀態(tài)屬性并在更新回調中更新它。

 struct CounterView: View {  @GestureState var isDetectingLongPress = false    var body: some View {  let press = LongPressGesture(minimumDuration: 1)  .updating($isDetectingLongPress) { currentState, gestureState, transaction in  gestureState = currentState  }    return Circle()  .fill(isDetectingLongPress ? Color.yellow : Color.green)  .frame(width: 100, height: 100, alignment: .center)  .gesture(press)  } }

在某個手勢期間更新永久狀態(tài)

若要跟蹤手勢的變化且在手勢結束后不應重置,請使用 onChanged(_:) (英文) 回調。例如,若要對你的 App 識別長按的次數(shù)進行計數(shù),請?zhí)砑右粋€ onChanged(_:) (英文) 回調并遞增計數(shù)器值。

 struct CounterView: View {  @GestureState var isDetectingLongPress = false  @State var totalNumberOfTaps = 0    var body: some View {  let press = LongPressGesture(minimumDuration: 1)  .updating($isDetectingLongPress) { currentState, gestureState, transaction in  gestureState = currentState  }.onChanged { _ in  self.totalNumberOfTaps += 1  }    return VStack {  Text("\(totalNumberOfTaps)")  .font(.largeTitle)    Circle()  .fill(isDetectingLongPress ? Color.yellow : Color.green)  .frame(width: 100, height: 100, alignment: .center)  .gesture(press)  }  } }

在手勢結束時更新永久狀態(tài)

若要識別手勢在何時成功完成并檢索手勢的最終值,請在回調中使用 onEnded(_:) (英文) 函數(shù)來更新你的 App 的狀態(tài)。SwiftUI 僅在手勢成功時才會調用 onEnded(_:) (英文) 回調。例如,在一個 LongPressGesture (英文) 期間,如果用戶在經過 minimumDuration (英文) 秒之前停止觸控視圖,或者他們的手指移動超過了 maximumDistance (英文) 點,則 SwiftUI 不會調用 onEnded(_:) (英文) 回調。

例如,若要在用戶完成長按后停止長按嘗試計數(shù),請?zhí)砑右粋€ onEnded(_:) (英文) 回調并有條件地應用手勢修飾符。

 struct CounterView: View {  @GestureState var isDetectingLongPress = false  @State var totalNumberOfTaps = 0  @State var doneCounting = false    var body: some View {  let press = LongPressGesture(minimumDuration: 1)  .updating($isDetectingLongPress) { currentState, gestureState, transaction in  gestureState = currentState  }.onChanged { _ in  self.totalNumberOfTaps += 1  }  .onEnded { _ in  self.doneCounting = true  }    return VStack {  Text("\(totalNumberOfTaps)")  .font(.largeTitle)    Circle()  .fill(doneCounting ? Color.red : isDetectingLongPress ? Color.yellow : Color.green)  .frame(width: 100, height: 100, alignment: .center)  .gesture(doneCounting ? nil : press)  }  } }

當前文章:創(chuàng)新互聯(lián)IOS教程:添加手勢互動操作
網頁網址:http://www.5511xx.com/article/djggopp.html