![](/img/trans.png)
[英]UIScrollView didScroll twice after setting contentOffset with VoiceOver
[英]Setting contentOffset after zooming and redrawing UIScrollView content
我有一个UIScrollView
,其中包含一个在缩放过程中会重绘的视图。 缩放效果很好,但是设置contentOffset
无效。 这是代码
func scrollViewDidZoom(scrollView: UIScrollView) {
// Get relative position of content view
let pX = (scrollView.contentOffset.x + scrollView.frame.width / 2.0) / scrollView.contentSize.width
let pY = (scrollView.contentOffset.y + scrollView.frame.height / 2.0) / scrollView.contentSize.height
// Rescale and redraw content view
contentView.frame=CGRect(x: 0,
y: 0,
width: contentView.frame.width * scrollView.zoomScale,
height: contentView.frame.height * scrollView.zoomScale)
contentView.scale *= scrollView.zoomScale
contentView.setNeedsDisplay()
// Recalculate content offsets so that relative position of content is the same as before
let nX = contentView.frame.width * pX - scrollView.frame.width / 2.0
let nY = contentView.frame.height * pY - scrollView.frame.height / 2.0
// Reset zoom level of scroll view and content offsets
scrollView.setZoomScale(1.0, animated: false)
scrollView.setContentOffset(CGPoint(x: nX, y: nY), animated: false)
}
结果是内容视图在应放大时只会沿正x和y方向(向下和向右)扩展。我已经看到了scrollViewDidEndZooming
其他一些潜在解决方案 ,但即使对于我的情况也无法使用。 知道我哪里出错了吗?
这里的问题是AutoLayout,或者我使用框架而不是约束。 通过以下方法解决了该问题:a)创建宽度约束属性,然后在需要时编辑其constant
数值,以及b)实现我自己的缩放行为,而不是默认的UIScrollView
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.