Swift - 用UIScrollView实现视差动画效果
效果
源码
https://github.com/YouXianMing/Swift-Animations
// // MoreInfoView.swift // Swift-Animations // // Created by YouXianMing on 16/8/18. // Copyright © 2016年 YouXianMing. All rights reserved. // import UIKit class MoreInfoView: UIView { var imageView : UIImageView! override init(frame: CGRect) { super.init(frame : frame) layer.borderWidth = 0.5 layer.borderColor = UIColor.blackColor().CGColor layer.masksToBounds = true /* * -------------- * *-50->|-view-width-|<-50-* * -------------- * */ let rect = frame imageView = UIImageView(frame: CGRectMake(-50, 0, rect.size.width + 50 * 2, rect.size.height)) imageView.contentMode = .ScaleAspectFill self.addSubview(imageView) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } }
// // ScrollImageViewController.swift // Swift-Animations // // Created by YouXianMing on 16/8/18. // Copyright © 2016年 YouXianMing. All rights reserved. // import UIKit class ScrollImageViewController: FullTitleVisualEffectViewController, UIScrollViewDelegate { let viewTag : Int! = 1000 var onceLinearEquation : Math! var pictures : [UIImage]! var scrollView : UIScrollView! override func setup() { super.setup() onceLinearEquation = Math(pointA: CGPointMake(0, -50), pointB: CGPointMake(contentView!.width, 270 - 80)) pictures = [UIImage]() pictures.append(UIImage(named: "1")!) pictures.append(UIImage(named: "2")!) pictures.append(UIImage(named: "3")!) pictures.append(UIImage(named: "4")!) pictures.append(UIImage(named: "5")!) scrollView = UIScrollView(frame: (contentView?.bounds)!) scrollView.delegate = self scrollView.pagingEnabled = true scrollView.backgroundColor = UIColor.blackColor() scrollView.showsHorizontalScrollIndicator = false scrollView.bounces = false scrollView.contentSize = CGSizeMake(CGFloat(pictures.count) * width, height) contentView?.addSubview(scrollView) for i in 0 ..< pictures.count { let showView = MoreInfoView(frame: CGRectMake(CGFloat(i) * width, 0, width, height)) showView.imageView.image = pictures[i] showView.tag = viewTag + i scrollView.addSubview(showView) } } func scrollViewDidScroll(scrollView: UIScrollView) { let X = scrollView.contentOffset.x for i in 0 ..< pictures.count { let showView = scrollView.viewWithTag(viewTag + i) as! MoreInfoView showView.imageView.x = onceLinearEquation.k * (X - CGFloat(i) * width) + onceLinearEquation.b } } }