如何將針旋轉成半圓?

當用戶輸入重量時,我想旋轉一根針。低值和高值根據用戶的身高動態變化。

pointer.transform = CGAffineTransform(rotationAngle: CGFloat(weight / low * .pi / 3))

此代碼在低端工作。但我不知道如何指向低~高,過高

? 最佳回答:

您要做的是將weight轉換為介于01之間的值,以獲得“進度”值。您可以通過使用inverseLerp函數來實現這一點,它看起來像這樣:

let progress = (weight - low) / (high - low)

此公式在weight == low時返回0,在weight == high時返回1。

現在你必須把它轉換成旋轉。假設默認情況下箭頭的圖像指向上,我們需要在[-pi / 2, pi / 2]的范圍內旋轉。pi是半個旋轉,所以我們向左旋轉四分之一,向右旋轉四分之一。

lerp函數將[0, 1]范圍內的值(與我們已有的值類似)轉換為范圍內的值,這正是我們所需要的??雌饋硎沁@樣的:

let value = (1 - progress) * start + progress * end

使用實際值,它將如下所示:

let angle = (1 - progress) * (-.pi / 2) + progress * (.pi / 2)

現在,我們使用它來變換箭頭視圖:

pointer.transform = CGAffineTransform(rotationAngle: angle)

默認情況下,視圖將按中心旋轉,因為默認情況下,這是其“錨點”所在的位置。由于我們希望視圖圍繞其框架的底部中間旋轉,因此可以按如下方式進行更改:

pointer.layer.anchorPoint = CGPoint(0.5, 1)

這應該像我們希望的那樣旋轉我們的視圖。

PS:我創建了一個名為CGMath的庫,其中包含這樣的函數。你可以在這里查看。

主站蜘蛛池模板: 国产日韩精品一区二区三区在线| 国产精品第一区第27页| 上原亚衣一区二区在线观看| 亚洲熟女www一区二区三区| jizz免费一区二区三区| 99久久无码一区人妻a黑| 国产综合无码一区二区辣椒 | 亚洲国产成人久久综合一区| 国产午夜福利精品一区二区三区 | 亚洲欧洲日韩国产一区二区三区| AV怡红院一区二区三区| 在线视频亚洲一区| 成人免费一区二区三区在线观看| 一区二区中文字幕| 无码人妻久久一区二区三区免费| 东京热人妻无码一区二区av| 麻豆一区二区三区蜜桃免费| 精品无码一区二区三区水蜜桃| 大香伊蕉日本一区二区| 日本免费一区二区三区四区五六区| 国产日韩高清一区二区三区| 一区二区三区精品高清视频免费在线播放 | 蜜桃视频一区二区| 精品一区二区三区无码免费直播| 激情无码亚洲一区二区三区| 亚洲欧洲专线一区| 欧美日本精品一区二区三区| 日韩在线视频一区| 无码精品人妻一区二区三区免费 | 无码日韩精品一区二区免费暖暖| 国产一区二区三区不卡AV| 日韩人妻无码一区二区三区久久99 | 国产精品综合一区二区三区| 美女福利视频一区二区| 国产一区麻豆剧传媒果冻精品| 亚洲日韩精品一区二区三区无码| 色偷偷一区二区无码视频| 国产日韩精品视频一区二区三区| 无码人妻一区二区三区兔费| 国产成人免费一区二区三区| 在线观看国产区亚洲一区成人 |