iOS拖拽View使其旋轉(zhuǎn)效果

效果是圖片有一個點固定, 然后拖拽view 使view按照指定的點旋轉(zhuǎn)



效果圖


? ? 我是獲取觸摸點和錨點的角度來旋轉(zhuǎn)的, 不知道有沒有什么更好的方法, 我就想出這么個, 忘請高手指點.

demo地址:https://github.com/Ra2212/RotateTheView.git

因為我們項目是要求底部中點,我就按照底部中點來的, 其他可以相應(yīng)修改,

思想是劃走上面的,然后alpha = 0; 返回到紅色的下面alpha = 1;

可以左右劃

//復(fù)原代碼

CGAffineTransform transform = CGAffineTransformMakeRotation(0);

self.transform = transform;

self.began_X = 0;self.alpha = 1.0;

view的錨點設(shè)置,?先設(shè)置錨點, 在設(shè)置frame 不然frame會變, 至于frame 和 anchorPoint的關(guān)系自己百度吧;

//設(shè)置錨點

self.layer.anchorPoint = CGPointMake(0.5, 1);

self.frame = CGRectMake(got_p6(43), got_p6(17+64), ScreenWidth - got_p6(86), EVE_H);


給view添加拖拽手勢

UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];

[self addGestureRecognizer:panGestureRecognizer];


在handlePan:方法中實現(xiàn)

//獲取拖拽得到的角度

UIView *vv = (UIView *)self.nextResponder;

CGPoint translation = [recognizer translationInView:vv];

double ang = atan((translation.x)/EVE_H);

_began_X = _began_X + ang;

ang是每次偏移的角度 , _began_X是累加的, 就是實際偏移的

為啥用反正切函數(shù),我解釋下:

示意圖

看圖中角A 正好是tan A = _began_X / 高

高實際是手指按壓點到錨點的垂直距離? 實際體驗旋轉(zhuǎn)很快, 就放大到視圖的高度也就是藍(lán)色view 的高度, 然后反正切求出角A,

求的得A是弧度, 旋轉(zhuǎn)正好也是弧度, 就直接旋轉(zhuǎn)view

//旋轉(zhuǎn)view

CGAffineTransform transform = CGAffineTransformMakeRotation(_began_X); self.transform = transform;

我又加了一些處理封裝了一下, 比較low, 模擬器上拽幾下沒反應(yīng)了, 真機效果很不錯, 不知道什么鬼.

有什么寶貴意見盡請?zhí)峁? 互相學(xué)習(xí)!!!

附上demo地址:https://github.com/Ra2212/RotateTheView.git

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容