<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                > 原文:http://www.swiftyper.com/Swift/scrollviewpart4.html # ScrollView 學習筆記 - Part4 前一節學了`ScrollView`當中的縮放,不過那個縮放實現得并不完美,因為縮放過后,圖片只會靜靜地呆在屏幕的一邊,一般情況,我們希望縮放后的圖片能夠居中。 要實現居中,其實并不復雜,我們只需要計算出`ScrollView`與`ImageView`的寬與高的差值,然后再除以2就可以算出補白的間距。如圖: ![](https://box.kancloud.cn/2015-11-19_564d44665fe40.png) 有了這個補白的間距,我們就可以設置`ImageView`的`frame`來設置它的位置,使其居中。 還有另一個方法是設置`ScrollView`的`ContentInset`,也能實現居中。 ![](https://box.kancloud.cn/2015-11-19_564d44668a29a.png) ## 實現居中 可以實現下面這個方面用來對縮放后的`View`進行居中: ~~~ private func recenterImage() { let scrollViewSize = scrollView.frame.size let imageSize = imageView.frame.size let horizontalSpace = imageSize.width < scrollViewSize.width ? (scrollViewSize.width - imageSize.width) / 2 : 0 let verticalSpace = imageSize.height < scrollViewSize.height ? (scrollViewSize.height - imageSize.height) / 2 : 0 scrollView.contentInset = UIEdgeInsets(top: verticalSpace, left: horizontalSpace, bottom: verticalSpace, right: horizontalSpace) } ~~~ 在`ViewDidLoad`、`viewWillLayoutSubviews`與`scrollViewDidZoom`當中調用這個方法,就能實現縮放后的圖片居中了。 ## 屏幕旋轉后圖片位置發生變化 當我們將圖片放大后對屏幕進行旋轉,會發現,圖片的中心發生了改變,不在原本的位置。這是因為雖然`ScrollView`的`contentOffset`沒有變化,但是由于屏幕的大小改變了,會影響到中心位置,所以我們可以看到圖片的位置發生了變化。 ![](https://box.kancloud.cn/2015-11-19_564d4466a594f.png) 要解決這個問題,我們需要在屏幕旋轉前記錄中心點的位置,然后在旋轉后,再根據這個中心點的位置來設置`contentOffset`,這樣就能保證旋轉前后的中心在同一個位置。我們可以在一個方法中完成所有的這些工作: ~~~ override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { // 計算中心點 let centerPoint = CGPoint(x: scrollView.contentOffset.x + CGRectGetWidth(scrollView.bounds) / 2, y: scrollView.contentOffset.y + CGRectGetHeight(scrollView.bounds) / 2) // 設置旋轉后的中心位置 coordinator.animateAlongsideTransition({ (context) -> Void in self.scrollView.contentOffset = CGPoint(x: centerPoint.x - size.width / 2, y: centerPoint.y - size.height / 2) }, completion: nil) } ~~~ `viewWillTrnsitionToSize(_:withTransitionCoordinator:)`是iOS 8中的新方法,這個方法可以讓你屏幕旋轉的時候對view進行一些操作,其中的`size`參數是旋轉后的view的大小。經過這樣的處理之后,旋轉前后的中心都會在同一個位置了。 ## 總結 這小節主要是對縮放的效果進行了一些小的優化,使它看起來不至于太山寨,主要是一些計算的東西,只要想通了也就不困難了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看