當用戶輸入重量時,我想旋轉一根針。低值和高值根據用戶的身高動態變化。
pointer.transform = CGAffineTransform(rotationAngle: CGFloat(weight / low * .pi / 3))
此代碼在低端工作。但我不知道如何指向低~高,過高
當用戶輸入重量時,我想旋轉一根針。低值和高值根據用戶的身高動態變化。
pointer.transform = CGAffineTransform(rotationAngle: CGFloat(weight / low * .pi / 3))
此代碼在低端工作。但我不知道如何指向低~高,過高
公眾號:1024技術圈
?? 提供互聯網知識和資訊,分享IT前沿技術,熱門資源,大廠面試題 ??
您要做的是將
weight
轉換為介于0
和1
之間的值,以獲得“進度”值。您可以通過使用inverseLerp
函數來實現這一點,它看起來像這樣:此公式在
weight == low
時返回0,在weight == high
時返回1。現在你必須把它轉換成旋轉。假設默認情況下箭頭的圖像指向上,我們需要在
[-pi / 2, pi / 2]
的范圍內旋轉。pi
是半個旋轉,所以我們向左旋轉四分之一,向右旋轉四分之一。lerp
函數將[0, 1]
范圍內的值(與我們已有的值類似)轉換為范圍內的值,這正是我們所需要的??雌饋硎沁@樣的:使用實際值,它將如下所示:
現在,我們使用它來變換箭頭視圖:
默認情況下,視圖將按中心旋轉,因為默認情況下,這是其“錨點”所在的位置。由于我們希望視圖圍繞其框架的底部中間旋轉,因此可以按如下方式進行更改:
這應該像我們希望的那樣旋轉我們的視圖。
PS:我創建了一個名為
CGMath
的庫,其中包含這樣的函數。你可以在這里查看。