ImageView 向下滚动时缩放

ImageView Scaling when scrolling down

如何在向下滚动时简单地将 imageView 缩放为 autolayout

尝试查看视差效果,但不是我想要的。

我只想使用一个 scrollView 和一个 header ImageView 可以调整大小取决于 scrollView 位置。

一步一步:

1 - 打开故事板并在顶部添加一个图像视图,这些约束(选择您的纵横比):

2 - select uiimage 的 aspectFill 模式和 clipSubviews

3 - 在 viewController 之上添加一个 UIScrollView,其中包含一个子视图。关于 scrollView 自动布局的所有细节:http://natashatherobot.com/ios-autolayout-scrollview/

4 - 然后在您的代码中引用您的 imageView 和 scrollView。

5 - 在 vi​​ewDidLoad 中,插入 self.automaticallyAdjustsScrollViewInsets = false 并设置 scrollView 的 contentInsets 和 contentOffset :

class ViewController: UIViewController {

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

    override func viewDidLoad() {
        super.viewDidLoad()

        self.automaticallyAdjustsScrollViewInsets = false
   }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        let imageHeight = imageView.frame.height

        let newOrigin = CGPoint(x: 0, y: -imageHeight)

        scrollView.contentOffset = newOrigin
        scrollView.contentInset = UIEdgeInsets(top: imageHeight, left: 0, bottom: 0, right: 0)
    }

}

6 - 将 scrollviewDelegate 添加到 ViewController 和 scrollViewDidScroll 方法以获取 scrollView

的位置
class ViewController: UIViewController, UIScrollViewDelegate

override func viewDidLoad() {
        super.viewDidLoad()

        scrollView.delegate = self
        self.automaticallyAdjustsScrollViewInsets = false
}

func scrollViewDidScroll(scrollView: UIScrollView) {

    let offsetY = scrollView.contentOffset.y

    if offsetY < 0
    {
        imageView.frame.size.height = -offsetY
    }
    else
    {
        imageView.frame.size.height = imageView.frame.height
    }
}

7 - 然后构建并 运行.

您可以在 github 下载示例: https://github.com/raphrel/scalingImageWhenScrollDown

也许有更好的解决方案,但这个可行。 享受