iOS拖拽View使其旋转效果

效果是图片有一个点固定, 然后拖拽view 使view按照指定的点旋转



效果图


    我是获取触摸点和锚点的角度来旋转的, 不知道有没有什么更好的方法, 我就想出这么个, 忘请高手指点.

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

因为我们项目是要求底部中点,我就按照底部中点来的, 其他可以相应修改,

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

可以左右划

//复原代码

CGAffineTransform transform = CGAffineTransformMakeRotation(0);

self.transform = transform;

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

view的锚点设置, 先设置锚点, 在设置frame 不然frame会变, 至于frame 和 anchorPoint的关系自己百度吧;

//设置锚点

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:方法中实现

//获取拖拽得到的角度

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是累加的, 就是实际偏移的

为啥用反正切函数,我解释下:

示意图

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

高实际是手指按压点到锚点的垂直距离  实际体验旋转很快, 就放大到视图的高度也就是蓝色view 的高度, 然后反正切求出角A,

求的得A是弧度, 旋转正好也是弧度, 就直接旋转view

//旋转view

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

我又加了一些处理封装了一下, 比较low, 模拟器上拽几下没反应了, 真机效果很不错, 不知道什么鬼.

有什么宝贵意见尽请提哈, 互相学习!!!

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容