向下滚动时ImageView缩放

时间:2015-11-02 16:08:40

标签: ios swift uiscrollview autolayout scale

向下滚动时如何简单地使用imageView缩放autolayout

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

我只想使用可以调整大小的scrollView和标题ImageView取决于scrollView位置。

1 个答案:

答案 0 :(得分:19)

一步一步:

1 - 打开故事板并使用这些约束添加图像视图(选择宽高比):

enter image description here

2 - 为您的uiimage选择aspectFill模式和clipSubviews

3 - 在viewController顶部添加一个UIScrollView,里面有一个子视图。有关使用scrollView的自动布局的所有详细信息:http://natashatherobot.com/ios-autolayout-scrollview/

4 - 然后在您的代码中对您的imageView和scrollView进行插座引用。

5 - 在viewDidLoad中,插入 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

可能有更好的解决方案,但这个有效。 享受