簡體   English   中英

縮放並重新繪制UIScrollView內容后設置contentOffset

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM