ParallaxHeader
Simple way to add parallax header to UIScrollView/UITableView written in Swift.
Install / Use
/learn @romansorochak/ParallaxHeaderREADME
ParallaxHeader
Simple way to add parallax header to UIScrollView or it's subclasses.
| One image view | Slider with images | Blur vibrant text | Blur round icon |
|----------------------------|---------------------------------|------------------------------|--------------------|
|
|
|
|
|
Try it here
Contents
Requirements
- iOS 8.0+
- Xcode 8.0+
- Swift 3.0+
Installation
CocoaPods
CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:
$ gem install cocoapods
CocoaPods 1.1.0+ is required to build Reusable 1.0.0+.
To integrate ParallaxHeader into your Xcode project using CocoaPods, specify it in your Podfile:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
target '<Your Target Name>' do
pod 'ParallaxHeader', '~> 3.0.0'
end
Then, run the following command:
$ pod install
Cocoapods versions
- Swift5 :
pod 'ParallaxHeader', '~> 3.0.0'
- Swift4 :
pod 'ParallaxHeader', '~> 2.0.0'
- Swift3 :
pod 'ParallaxHeader', '~> 1.0.6'
Usage
To add parallax header to scroll view (table view) you need just create view and set it to your scroll view (table view).
Use case - one image view
//create view as header view
let imageView = UIImageView()
imageView.image = UIImage(named: "1")
imageView.contentMode = .scaleAspectFill
tableView.parallaxHeader.view = imageView
tableView.parallaxHeader.height = 400
tableView.parallaxHeader.minimumHeight = 0
tableView.parallaxHeader.mode = .topFill
Use case - slider of images
let parallaxHeight: CGFloat = view.frame.height - 64 - 49 - sliderHeight
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
collectionParallaxView = UICollectionView(
frame: CGRect(x: 0, y: 0, width: view.frame.width, height: parallaxHeight),
collectionViewLayout: layout
)
collectionParallaxView.isPagingEnabled = true
collectionParallaxView.showsHorizontalScrollIndicator = false
collectionParallaxView.backgroundColor = UIColor.white
collectionParallaxView.delegate = self
collectionParallaxView.dataSource = self
//adding view as parallax header to table view is straightforward
tableView.parallaxHeader.view = collectionParallaxView
tableView.parallaxHeader.height = parallaxHeight
tableView.parallaxHeader.minimumHeight = 0
tableView.parallaxHeader.mode = .centerFill
tableView.parallaxHeader.parallaxHeaderDidScrollHandler = { parallaxHeader in
print(parallaxHeader.progress)
}
Use case - Blur vibrant text
let imageView = UIImageView()
imageView.image = UIImage(named: "profile")
imageView.contentMode = .scaleAspectFill
//setup blur vibrant view
imageView.blurView.setup(style: UIBlurEffectStyle.dark, alpha: 1).enable()
headerImageView = imageView
tableView.parallaxHeader.view = imageView
tableView.parallaxHeader.height = 400
tableView.parallaxHeader.minimumHeight = 40
tableView.parallaxHeader.mode = .centerFill
tableView.parallaxHeader.parallaxHeaderDidScrollHandler = { parallaxHeader in
//update alpha of blur view on top of image view
parallaxHeader.view.blurView.alpha = 1 - parallaxHeader.progress
}
// Label for vibrant text
let vibrantLabel = UILabel()
vibrantLabel.text = "Vibrant"
vibrantLabel.font = UIFont.systemFont(ofSize: 40.0)
vibrantLabel.sizeToFit()
vibrantLabel.textAlignment = .center
imageView.blurView.vibrancyContentView?.addSubview(vibrantLabel)
//add constraints using SnapKit library
vibrantLabel.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
Use case - Blur round icon
let image = UIImage(named: "profile")
let imageView = UIImageView()
imageView.image = image
imageView.contentMode = .scaleAspectFill
parallaxHeaderView = imageView
//setup bur view
imageView.blurView.setup(style: UIBlurEffectStyle.dark, alpha: 1).enable()
tableView.parallaxHeader.view = imageView
tableView.parallaxHeader.height = 400
tableView.parallaxHeader.minimumHeight = 120
tableView.parallaxHeader.mode = .centerFill
tableView.parallaxHeader.parallaxHeaderDidScrollHandler = { parallaxHeader in
//update alpha of blur view on top of image view
parallaxHeader.view.blurView.alpha = 1 - parallaxHeader.progress
}
let roundIcon = UIImageView(
frame: CGRect(x: 0, y: 0, width: 100, height: 100)
)
roundIcon.image = image
roundIcon.layer.borderColor = UIColor.white.cgColor
roundIcon.layer.borderWidth = 2
roundIcon.layer.cornerRadius = roundIcon.frame.width / 2
roundIcon.clipsToBounds = true
//add round image view to blur content view
//do not use vibrancyContentView to prevent vibrant effect
imageView.blurView.blurContentView?.addSubview(roundIcon)
//add constraints using SnpaKit library
roundIcon.snp.makeConstraints { make in
make.center.equalToSuperview()
make.width.height.equalTo(100)
}
Author
Roman Sorochak - iOS developer - roman.sorochak@gmail.com
License
ParallaxHeader is released under the MIT license. See LICENSE for details.
Related Skills
node-connect
346.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
346.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
346.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
