如何在scrollview缩放时保证指定区域内容视图始终处于可见框架内
ScrollView缩放时保持光标在可视区域的实现方案
核心逻辑是在缩放事件回调中增加光标位置越界校验,动态调整ScrollView的滚动偏移量即可,无需修改光标本身的坐标和尺寸规则。
实现步骤
- 第一步:坐标转换,计算光标当前在ScrollView可视区域坐标系下的实际位置
以iOS Swift代码为例,调用坐标转换API得到光标在可视区的帧:let cursorVisibleFrame = scrollView.convert(cursorView.frame, from: contentView)
安卓端可通过scrollView.offsetDescendantRectToMyCoords(cursorView, cursorRect)获取对应坐标 - 第二步:四个方向越界判断与偏移修正
分别校验光标上下左右四个边是否超出ScrollView可视区边界,对应调整contentOffset:- 光标顶部 < 可视区顶部:contentOffset.y 减去(可视区顶部 - 光标顶部)的差值
- 光标底部 > 可视区底部:contentOffset.y 加上(光标底部 - 可视区底部)的差值
- 光标左侧 < 可视区左侧:contentOffset.x 减去(可视区左侧 - 光标左侧)的差值
- 光标右侧 > 可视区右侧:contentOffset.x 加上(光标右侧 - 可视区右侧)的差值
- 第三步:偏移量合法性校验
调整完的contentOffset需要限制在ScrollView本身允许的滚动范围内,避免偏移量过大导致内容边缘出现空白区域。
问题效果参考
缩放前正常效果:

缩放后异常效果(光标超出可视区):
内容的提问来源于stack exchange,提问作者n....
相关产品推荐
相关产品推荐

