一个转轮控件RouletteView
产品突然给了一个需求,让做一个和iPhone7Plus一样用转轮变焦的控件
!!!这些产品和交互。。。就知道对着苹果抄。。。!!
研究了一下苹果的iPhone7Plus的变焦转轮,分析出以下需求
反馈区域
视图 | 反馈 |
---|---|
标签 | 对变焦标签区域长按或左滑,弹出转轮 |
转轮(可见) | 转轮存在时,整个转轮区域的滑动为变焦调节 |
转轮(不可见) | 转轮不存在时,初标签外的区域滑动为调节亮度(其它反馈) |
手势
手势 | 反馈 |
---|---|
长按 | 弹出转轮 |
滑动(左) | 弹出转轮 |
滑动(垂直) | 调节变焦距离 |
控件实现思路
转动效果的实现
让设计给画一个圆形的图片,在转动时旋转这个图片的Transform
设定一个阈值Range来控制旋转的最大和最小角度 代码中实用的是 range: CGFloat = 200
反馈区域的处理
因为要根据转轮图片是否出现调整反馈区域,所以
重写HitTest函数,在不同的情况下,调整反馈区域的大小来返回当前View
手势的处理
- 长按手势: 使用LongPressGestureRecoginze来接收长按手势让轮盘显示或者隐藏,根据文章Gesture和UITouch的互相作用注意设置 cancelsTouchesInView = false
- 左滑手势: 在 continueTracking 自己进行判断
- 上下滑动: 在 continueTracking 中进行运算从而旋转图片
代码展示
1 |
|