UIKit-UIStoryboard、UIScrollView 圖片左右滑動練習(圖層高度鎖定)

要設置可以左右滑動的ScrollView,如下影片:

1.加入一個ScrollView ,並在ScrollView上加一個ImageView

2.導入要放入ImageView的圖片

3.打開Assistant

4.分別用右鍵把ScrollView 跟ImageView的outlet拉出來到Assistant程式碼上

5.開始寫入代碼:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var backgroundImageView: UIImageView!

//super.viewDidAppear(animated)當視圖控制器的視圖被添加到應用視窗並顯示給用戶時會被調用
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// 调用updateZoomSizeFor方法來根據當前視圖的大小設置滾動視圖的縮放比例
updateZoomSizeFor(size: view.bounds.size)
}

func updateZoomSizeFor(size: CGSize) {
//固定圖片高度,讓圖片高度跟scrollViewu一樣高,且無法滑動
let heightScale = scrollView.bounds.height / backgroundImageView.bounds.height
scrollView.minimumZoomScale = heightScale
scrollView.maximumZoomScale = heightScale
scrollView.zoomScale = heightScale
}
}
//extension 不能放在class裡面

extension ViewController: UIScrollViewDelegate {
// UIScrollViewDelegate:確定在UIScrollView中哪個視圖應響應縮放手勢
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
// 返回backgroundImageView作為需要縮放的視圖
// 當用戶在UIScrollView上使用縮放手勢時,只有這個視圖會被縮放
return backgroundImageView
}

// UIScrollView的縮放事件處理函數
func scrollViewDidZoom(_ scrollView: UIScrollView) {
// 這一步是為了確定當內容被縮放並且變得比滾動視圖本身的高度要小時,如何將其垂直居中
let inset = (scrollView.bounds.height - backgroundImageView.frame.height) / 2
// 設置滾動視圖的內容邊距,以使縮放後的內容保持垂直居中
// 上邊距被設置為計算出的inset值,但不會小於0(使用max(inset, 0)確保這一點)
// 左、下、右邊距保持為0,不進行調整
scrollView.contentInset = .init(top: max(inset, 0), left: 0, bottom: 0, right: 0)

}

}


#Preview {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
return storyboard.instantiateViewController(withIdentifier: "ViewController")
}

--

--