You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UIScrollView缩放场景下获取cycleView位置并居中展示view2的问题

前提视图层级

视图层级示意图

  • scroll view
    • container view
      • cycle view
问题产生原因
  • 坐标转换方法误用:convert(_:to:) 方法要求传入的第一个参数是调用方自身坐标系下的几何值,你传入的cycleView.frame是cycleView在其父视图(即containerView)坐标系下的值,不属于cycleView自身坐标系,第一步转换结果就存在错误。
  • 坐标系不匹配:view2添加在containerView上,它的center属性需要使用containerView的坐标系,你后续额外将坐标转换到了scrollView坐标系,两者坐标系不统一,自然无法得到正确位置,在scrollView存在缩放、滑动偏移的场景下偏差会进一步放大。
正确解决方案

如果cycleView是containerView的直接子视图,不需要做任何坐标转换,直接赋值即可:

view2.center = cycleView.center

如果cycleView和containerView之间还有其他嵌套的父视图,使用以下方式转换坐标:

// 将cycleView自身的中心点(自身bounds坐标系下)转换为containerView坐标系下的点
let targetCenter = cycleView.convert(CGPoint(x: cycleView.bounds.midX, y: cycleView.bounds.midY), to: containerView)
view2.center = targetCenter

该方案下view2和cycleView同属containerView的子视图,scrollView缩放时两个视图会同步跟随containerView缩放,相对位置保持一致,完全匹配需求。

内容的提问来源于stack exchange,提问作者Taras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:54:02