diff --git a/.gitignore b/.gitignore
index bd8202bb..e285cee2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -67,4 +67,5 @@ fastlane/test_output
# Gitbook
node_modules
-_book
\ No newline at end of file
+_book
+xcodebuild.log
diff --git a/.jazzy.yaml b/.jazzy.yaml
index a30426bc..d523f684 100644
--- a/.jazzy.yaml
+++ b/.jazzy.yaml
@@ -1,8 +1,27 @@
+# ---- About ----
module: Hero
-author: Luke Zhao
-author_url: http://lkzhao.com
-github_url: https://github.com/lkzhao/Hero
-swift_version: 3.0.2
-source_directory: Examples
+module_version: 1.5.0
+author: HeroTransitions
readme: README.md
-theme: fullwidth
\ No newline at end of file
+copyright: 'See [license](https://github.com/HeroTransitions/Hero/blob/develop/LICENSE) for more details.'
+
+# ---- URLs ----
+author_url: https://herotransitions.github.io/
+dash_url: https://herotransitions.github.io/docsets/ScreenKitFramework.xml
+github_url: https://github.com/HeroTransitions/Hero
+github_file_prefix: https://github.com/HeroTransitions/Hero/tree/version/1.5.0/
+
+# ---- Sources ----
+podspec: Hero.podspec
+
+# ---- Generation ----
+clean: true
+output: docs
+min_acl: public
+hide_documentation_coverage: false
+skip_undocumented: false
+objc: false
+swift_version: 5.0.1
+
+# ---- Formatting ----
+theme: fullwidth
diff --git a/.swift-version b/.swift-version
deleted file mode 100644
index bf77d549..00000000
--- a/.swift-version
+++ /dev/null
@@ -1 +0,0 @@
-4.2
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 627b36ab..113a9f35 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,7 @@ The changelog for `Hero`. Also see the [releases](https://github.com/HeroTransit
--------------------------------------
-## Upcoming release
+## [1.5.0](https://github.com/HeroTransitions/Hero/releases/tag/1.5.0)
### Added
@@ -26,7 +26,6 @@ The changelog for `Hero`. Also see the [releases](https://github.com/HeroTransit
- Added support for Swift 4.2.
[#534](https://github.com/HeroTransitions/Hero/pull/534) by [@rennarda](https://github.com/rennarda)
-
## [1.3.1](https://github.com/HeroTransitions/Hero/releases/tag/1.3.1)
### Fixed
diff --git a/Examples/AppStoreCardExample.swift b/Examples/AppStoreCardExample.swift
index f472b7ac..ae67d213 100644
--- a/Examples/AppStoreCardExample.swift
+++ b/Examples/AppStoreCardExample.swift
@@ -219,7 +219,12 @@ class AppStoreViewController2: ExampleBaseViewController {
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent neque est, hendrerit vitae nibh ultrices, accumsan elementum ante. Phasellus fringilla sapien non lorem consectetur, in ullamcorper tortor condimentum. Nulla tincidunt iaculis maximus. Sed ut urna urna. Nulla at sem vel neque scelerisque imperdiet. Donec ornare luctus dapibus. Donec aliquet ante augue, at pellentesque ipsum mollis eget. Cras vulputate mauris ac eleifend sollicitudin. Vivamus ut posuere odio. Suspendisse vulputate sem vel felis vehicula iaculis. Fusce sagittis, eros quis consequat tincidunt, arcu nunc ornare nulla, non egestas dolor ex at ipsum. Cras et massa sit amet quam imperdiet viverra. Mauris vitae finibus nibh, ac vulputate sapien.
"""
- contentCard.backgroundColor = .white
+ if #available(iOS 13.0, *) {
+ contentCard.backgroundColor = .systemBackground
+ } else {
+ contentCard.backgroundColor = .white
+ }
+
contentCard.clipsToBounds = true
contentCard.addSubview(contentView)
diff --git a/Examples/ExampleBaseViewController.swift b/Examples/ExampleBaseViewController.swift
index dbe48732..35d7999b 100644
--- a/Examples/ExampleBaseViewController.swift
+++ b/Examples/ExampleBaseViewController.swift
@@ -14,7 +14,11 @@ class ExampleBaseViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
- view.backgroundColor = .white
+ if #available(iOS 13.0, *) {
+ view.backgroundColor = .systemBackground
+ } else {
+ view.backgroundColor = .white
+ }
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onTap)))
dismissButton.setTitle("Back", for: .normal)
diff --git a/Examples/MainViewController.swift b/Examples/MainViewController.swift
index 043c61cf..f29efab6 100644
--- a/Examples/MainViewController.swift
+++ b/Examples/MainViewController.swift
@@ -9,7 +9,11 @@ class MainViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
- view.backgroundColor = .white
+ if #available(iOS 13.0, *) {
+ view.backgroundColor = UIColor.systemBackground
+ } else {
+ view.backgroundColor = .white
+ }
view.addSubview(collectionView)
@@ -27,6 +31,13 @@ class MainViewController: UIViewController {
let viewSource = ClosureViewSource { (label: UILabel, data: SourceData, index) in
label.text = "\(index + 1). \(data.1)"
label.textAlignment = .center
+ if #available(iOS 13.0, *) {
+ label.textColor = .label
+ label.backgroundColor = .systemBackground
+ } else {
+ label.textColor = .darkText
+ label.backgroundColor = .white
+ }
label.layer.borderColor = UIColor.gray.cgColor
label.layer.borderWidth = 0.5
label.layer.cornerRadius = 8
@@ -51,22 +62,13 @@ class MainViewController: UIViewController {
imageView.contentMode = .scaleAspectFit
let imageProvider = SimpleViewProvider(views: [imageView], sizeStrategy: (.fill, .fit))
-
- let legacyButton = UIButton(type: .system)
- legacyButton.setTitle("Legacy Examples", for: .normal)
- legacyButton.addTarget(self, action: #selector(showLegacy), for: .touchUpInside)
- let legacyExamplesProvider = SimpleViewProvider(views: [legacyButton], sizeStrategy: (.fill, .fit))
-
+
collectionView.provider = ComposedProvider(
layout: FlowLayout(lineSpacing: 10).inset(by: UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)),
- sections: [imageProvider, examplesProvider, legacyExamplesProvider]
+ sections: [imageProvider, examplesProvider]
)
}
-
- @objc func showLegacy() {
- hero.replaceViewController(with: viewController(forStoryboardName: "Main"))
- }
-
+
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
collectionView.frame = view.bounds
diff --git a/Examples/MatchExample.swift b/Examples/MatchExample.swift
index 28aa0cb2..3c94b9c0 100644
--- a/Examples/MatchExample.swift
+++ b/Examples/MatchExample.swift
@@ -51,7 +51,7 @@ class MatchExampleViewController1: ExampleBaseViewController {
class MatchExampleViewController2: ExampleBaseViewController {
let redView = UIView()
let blackView = UIView()
- let whiteView = UIView()
+ let backgroundView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
@@ -65,12 +65,16 @@ class MatchExampleViewController2: ExampleBaseViewController {
blackView.cornerRadius = 8
view.addSubview(blackView)
- whiteView.backgroundColor = .white
- whiteView.cornerRadius = 8
+ if #available(iOS 13.0, *) {
+ backgroundView.backgroundColor = .systemBackground
+ } else {
+ backgroundView.backgroundColor = .white
+ }
+ backgroundView.cornerRadius = 8
// .useGlobalCoordinateSpace modifier is needed here otherwise it will be covered by redView during transition.
// see http://lkzhao.com/2018/03/02/hero-useglobalcoordinatespace-explained.html for detail
- whiteView.hero.modifiers = [.translate(y: 500), .useGlobalCoordinateSpace]
- view.addSubview(whiteView)
+ backgroundView.hero.modifiers = [.translate(y: 500), .useGlobalCoordinateSpace]
+ view.addSubview(backgroundView)
}
override func viewDidLayoutSubviews() {
@@ -78,6 +82,6 @@ class MatchExampleViewController2: ExampleBaseViewController {
redView.frame = view.bounds
blackView.frame.size = CGSize(width: 250, height: 60)
blackView.center = CGPoint(x: view.bounds.midX, y: 130)
- whiteView.frame = CGRect(x: (view.bounds.width - 250) / 2, y: 180, width: 250, height: view.bounds.height - 320)
+ backgroundView.frame = CGRect(x: (view.bounds.width - 250) / 2, y: 180, width: 250, height: view.bounds.height - 320)
}
}
diff --git a/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
index fa3f1e5d..7021df30 100644
--- a/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -103,8 +103,9 @@
"scale" : "2x"
},
{
- "idiom" : "ios-marketing",
"size" : "1024x1024",
+ "idiom" : "ios-marketing",
+ "filename" : "Icon-1024.png",
"scale" : "1x"
}
],
diff --git a/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Icon-1024.png b/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Icon-1024.png
new file mode 100644
index 00000000..890732b5
Binary files /dev/null and b/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Icon-1024.png differ
diff --git a/Examples/Resources/Assets.xcassets/LaunchImage.launchimage/Contents.json b/Examples/Resources/Assets.xcassets/LaunchImage.launchimage/Contents.json
deleted file mode 100644
index d746a609..00000000
--- a/Examples/Resources/Assets.xcassets/LaunchImage.launchimage/Contents.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "images" : [
- {
- "orientation" : "landscape",
- "idiom" : "tv",
- "extent" : "full-screen",
- "minimum-system-version" : "11.0",
- "scale" : "2x"
- },
- {
- "orientation" : "landscape",
- "idiom" : "tv",
- "extent" : "full-screen",
- "minimum-system-version" : "9.0",
- "scale" : "1x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/Examples/Resources/Base.lproj/LaunchScreen.storyboard b/Examples/Resources/Base.lproj/LaunchScreen.storyboard
index fdf3f97d..7fd29bfa 100644
--- a/Examples/Resources/Base.lproj/LaunchScreen.storyboard
+++ b/Examples/Resources/Base.lproj/LaunchScreen.storyboard
@@ -1,7 +1,10 @@
-
-
+
+
+
-
+
+
+
@@ -9,14 +12,11 @@
-
-
-
-
-
+
+
diff --git a/Examples/Resources/Info.plist b/Examples/Resources/Info.plist
index 2f336fb5..43500eb1 100644
--- a/Examples/Resources/Info.plist
+++ b/Examples/Resources/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.0
+ $(MARKETING_VERSION)
CFBundleVersion
1
LSRequiresIPhoneOS
diff --git a/Examples/Resources/UIKit+HeroExamples.swift b/Examples/Resources/UIKit+HeroExamples.swift
index 43a5e796..fc8e096f 100644
--- a/Examples/Resources/UIKit+HeroExamples.swift
+++ b/Examples/Resources/UIKit+HeroExamples.swift
@@ -23,7 +23,7 @@
import UIKit
public extension UIView {
- @IBInspectable public var cornerRadius: CGFloat {
+ @IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
@@ -32,7 +32,7 @@ public extension UIView {
layer.cornerRadius = newValue
}
}
- @IBInspectable public var shadowRadius: CGFloat {
+ @IBInspectable var shadowRadius: CGFloat {
get {
return layer.shadowRadius
}
@@ -41,7 +41,7 @@ public extension UIView {
layer.shadowRadius = newValue
}
}
- @IBInspectable public var shadowOpacity: Float {
+ @IBInspectable var shadowOpacity: Float {
get {
return layer.shadowOpacity
}
@@ -50,7 +50,7 @@ public extension UIView {
layer.shadowOpacity = newValue
}
}
- @IBInspectable public var shadowColor: UIColor? {
+ @IBInspectable var shadowColor: UIColor? {
get {
return layer.shadowColor != nil ? UIColor(cgColor: layer.shadowColor!) : nil
}
@@ -59,7 +59,7 @@ public extension UIView {
layer.shadowColor = newValue?.cgColor
}
}
- @IBInspectable public var shadowOffset: CGSize {
+ @IBInspectable var shadowOffset: CGSize {
get {
return layer.shadowOffset
}
@@ -68,7 +68,7 @@ public extension UIView {
layer.shadowOffset = newValue
}
}
- @IBInspectable public var zPosition: CGFloat {
+ @IBInspectable var zPosition: CGFloat {
get {
return layer.zPosition
}
diff --git a/Hero.podspec b/Hero.podspec
index 0975521e..ead42126 100644
--- a/Hero.podspec
+++ b/Hero.podspec
@@ -1,22 +1,36 @@
+# frozen_string_literal: true
+
Pod::Spec.new do |s|
- s.name = "Hero"
- s.version = "1.4.0"
- s.summary = "Elegant transition library for iOS"
-
- s.description = <<-DESC
- Hero is a library for building iOS view controller transitions. It provides a declarative layer on top of the UIKit's cumbersome transition APIs. Making custom transitions an easy task for developers.
- DESC
-
- s.homepage = "https://github.com/HeroTransitions/Hero"
- s.screenshots = "https://github.com/HeroTransitions/Hero/blob/master/Resources/Hero.png?raw=true"
- s.license = 'MIT'
- s.author = { "Luke" => "lzhaoyilun@gmail.com" }
- s.source = { :git => "https://github.com/HeroTransitions/Hero.git", :tag => s.version.to_s }
-
- s.ios.deployment_target = '8.0'
- s.tvos.deployment_target = '9.0'
-
- s.ios.frameworks = 'UIKit', 'Foundation'
+ s.name = 'Hero'
+ s.version = '1.5.0'
+ s.summary = 'Elegant transition library for iOS'
+
+ s.description = <<-DESC
+ Hero is a library for building iOS view controller transitions.
+ It provides a declarative layer on top of the UIKit's cumbersome transition APIs.
+ Making custom transitions an easy task for developers.
+ DESC
+
+ s.homepage = 'https://github.com/HeroTransitions/Hero'
+ s.screenshots = 'https://github.com/HeroTransitions/Hero/blob/master/Resources/Hero.png?raw=true'
+ s.documentation_url = 'https://herotransitions.github.io/Hero/'
+ s.screenshots = [ https://git.io/JeRkv, https://git.io/JeRke, https://git.io/JeRkf, https://git.io/JeRkJ]
+ s.license = { :type => 'MIT' }
+ s.author = {
+ 'Luke' => 'lzhaoyilun@gmail.com',
+ 'Joe Mattiello' => 'git@joemattiello.com'
+ }
+ s.source = { git: 'https://github.com/HeroTransitions/Hero.git', tag: s.version.to_s }
+
+ s.cocoapods_version = '>= 1.4.0'
+
+ s.ios.deployment_target = '8.0'
+ s.tvos.deployment_target = '9.0'
+
+ s.ios.frameworks = 'UIKit', 'Foundation', 'QuartzCore', 'CoreGraphics', 'CoreMedia'
+ s.tvos.frameworks = 'UIKit', 'Foundation', 'QuartzCore', 'CoreGraphics', 'CoreMedia'
+
+ s.swift_version = '4.2'
s.requires_arc = true
diff --git a/Hero.xcodeproj/project.pbxproj b/Hero.xcodeproj/project.pbxproj
index 7bf74bdb..b113df49 100644
--- a/Hero.xcodeproj/project.pbxproj
+++ b/Hero.xcodeproj/project.pbxproj
@@ -40,38 +40,22 @@
5C5442AA2004092500E1E326 /* HeroCompatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C69728F2002CDBD001A5051 /* HeroCompatible.swift */; };
5C6972902002CDBD001A5051 /* HeroCompatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C69728F2002CDBD001A5051 /* HeroCompatible.swift */; };
83043017B73BC66DBB920D5C /* Pods_HeroExamples.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEE340F89FF0A49DD23A5A6E /* Pods_HeroExamples.framework */; };
- A304BF841DF2717900A03345 /* ImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF831DF2717900A03345 /* ImageViewController.swift */; };
- A304BF8A1DF647FC00A03345 /* ImageCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF891DF647FC00A03345 /* ImageCells.swift */; };
A306D3B61E1C7A2E00B6C23A /* Hero.h in Headers */ = {isa = PBXBuildFile; fileRef = A306D3B41E1C7A2E00B6C23A /* Hero.h */; settings = {ATTRIBUTES = (Public, ); }; };
A306D3B91E1C7A2E00B6C23A /* Hero.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A306D3B21E1C7A2E00B6C23A /* Hero.framework */; };
A306D3BB1E1C7A2E00B6C23A /* Hero.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A306D3B21E1C7A2E00B6C23A /* Hero.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- A313499B1E1E2AED00EB5139 /* ImageLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A313499A1E1E2AED00EB5139 /* ImageLibrary.swift */; };
A3298CDA1E304851005B06BB /* BasePreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3298CD91E304851005B06BB /* BasePreprocessor.swift */; };
A32D2CF21E4A7DC3008D35FF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A33E60AB1DE761C90065CBD8 /* Assets.xcassets */; };
- A32D2CF81E4A80C3008D35FF /* ImageGalleryCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3499D9E1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift */; };
- A32D2CF91E4A80C5008D35FF /* ImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF831DF2717900A03345 /* ImageViewController.swift */; };
- A32D2CFA1E4A80C7008D35FF /* ImageLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A313499A1E1E2AED00EB5139 /* ImageLibrary.swift */; };
- A32D2CFB1E4A80C9008D35FF /* ImageCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF891DF647FC00A03345 /* ImageCells.swift */; };
A32D2CFC1E4A80DC008D35FF /* UIKit+HeroExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60B61DE7621C0065CBD8 /* UIKit+HeroExamples.swift */; };
A32D2D021E4A8153008D35FF /* Basic.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A32D2D001E4A8153008D35FF /* Basic.storyboard */; };
A32D2D031E4A8153008D35FF /* ImageGallery.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A32D2D011E4A8153008D35FF /* ImageGallery.storyboard */; };
A32D2D051E4A81D5008D35FF /* ImageViewer.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A32D2D041E4A81D5008D35FF /* ImageViewer.storyboard */; };
- A32D2D0D1E4D545B008D35FF /* MenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32D2D0C1E4D545B008D35FF /* MenuViewController.swift */; };
- A32D2D101E4E14DD008D35FF /* BuiltInTransitions.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A32D2D0F1E4E14DD008D35FF /* BuiltInTransitions.storyboard */; };
A32D2D131E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32D2D121E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift */; };
A32D2D141E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32D2D121E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift */; };
A33E60A51DE761C90065CBD8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60A41DE761C90065CBD8 /* AppDelegate.swift */; };
- A33E60AA1DE761C90065CBD8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A33E60A81DE761C90065CBD8 /* Main.storyboard */; };
A33E60AC1DE761C90065CBD8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A33E60AB1DE761C90065CBD8 /* Assets.xcassets */; };
A33E60AF1DE761C90065CBD8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A33E60AD1DE761C90065CBD8 /* LaunchScreen.storyboard */; };
A33E60BD1DE7621C0065CBD8 /* UIKit+HeroExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60B61DE7621C0065CBD8 /* UIKit+HeroExamples.swift */; };
- A33E60BE1DE7621C0065CBD8 /* City.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60B91DE7621C0065CBD8 /* City.swift */; };
- A33E60BF1DE7621C0065CBD8 /* CityGuideCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60BA1DE7621C0065CBD8 /* CityGuideCell.swift */; };
- A33E60C01DE7621C0065CBD8 /* CityGuideViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60BB1DE7621C0065CBD8 /* CityGuideViewController.swift */; };
- A33E60C11DE7621C0065CBD8 /* CityViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60BC1DE7621C0065CBD8 /* CityViewController.swift */; };
- A3499D9F1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3499D9E1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift */; };
A355CEC8D787CF71B0D7CBDA /* Pods_HeroTvOSExamples.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD2306FDA4E15ADA91EFED44 /* Pods_HeroTvOSExamples.framework */; };
- A35949181E1A2BE60095F407 /* LegacyExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35949171E1A2BE60095F407 /* LegacyExampleViewController.swift */; };
A37D7B411E2C0C7E00AC1959 /* CascadePreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37D7B3D1E2C0C7E00AC1959 /* CascadePreprocessor.swift */; };
A37D7B421E2C0C7E00AC1959 /* IgnoreSubviewModifiersPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37D7B3E1E2C0C7E00AC1959 /* IgnoreSubviewModifiersPreprocessor.swift */; };
A37D7B431E2C0C7E00AC1959 /* MatchPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37D7B3F1E2C0C7E00AC1959 /* MatchPreprocessor.swift */; };
@@ -113,17 +97,12 @@
B101B2CC1E56140B007E7112 /* UIView+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = B101B2C91E561408007E7112 /* UIView+Hero.swift */; };
B101B2CE1E561421007E7112 /* UIViewController+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = B101B2CD1E561421007E7112 /* UIViewController+Hero.swift */; };
B101B2CF1E561421007E7112 /* UIViewController+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = B101B2CD1E561421007E7112 /* UIViewController+Hero.swift */; };
- B114B6901E412A0B0009CEDE /* AppleProductViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B114B68F1E412A0B0009CEDE /* AppleProductViewController.swift */; };
B1193AB61E525CD8005B1C87 /* HeroViewPropertyViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1193AB51E525CD8005B1C87 /* HeroViewPropertyViewContext.swift */; };
B1193AB71E525CD8005B1C87 /* HeroViewPropertyViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1193AB51E525CD8005B1C87 /* HeroViewPropertyViewContext.swift */; };
B1193AB91E525D12005B1C87 /* HeroAnimatorViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1193AB81E525D12005B1C87 /* HeroAnimatorViewContext.swift */; };
B1193ABA1E525D12005B1C87 /* HeroAnimatorViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1193AB81E525D12005B1C87 /* HeroAnimatorViewContext.swift */; };
- B1275D971E4C0D850099A0E9 /* PluginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1275D961E4C0D850099A0E9 /* PluginViewController.swift */; };
- B147F2651FAEA8F0006475A3 /* FirstViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B147F2631FAEA8F0006475A3 /* FirstViewController.swift */; };
- B147F2661FAEA8F0006475A3 /* Navigation.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B147F2641FAEA8F0006475A3 /* Navigation.storyboard */; };
B16197E01EF451C500A540D2 /* HeroTransition+Interactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16197DF1EF451C400A540D2 /* HeroTransition+Interactive.swift */; };
B16197E11EF451C500A540D2 /* HeroTransition+Interactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16197DF1EF451C400A540D2 /* HeroTransition+Interactive.swift */; };
- B16A21A01E4E3907007B8B4C /* AnimationSelectTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16A219F1E4E3907007B8B4C /* AnimationSelectTableViewController.swift */; };
B16B75311EF45A110018DBEF /* HeroTransitionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16B75301EF45A110018DBEF /* HeroTransitionState.swift */; };
B16B75321EF45A110018DBEF /* HeroTransitionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16B75301EF45A110018DBEF /* HeroTransitionState.swift */; };
B16B75341EF461090018DBEF /* HeroProgressRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16B75331EF461090018DBEF /* HeroProgressRunner.swift */; };
@@ -136,18 +115,6 @@
B17D888A1EF5A5330048D3E8 /* HeroTransition+UINavigationControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B17D88881EF5A5330048D3E8 /* HeroTransition+UINavigationControllerDelegate.swift */; };
B17D888C1EF5A5500048D3E8 /* HeroTransition+UIViewControllerTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B17D888B1EF5A5500048D3E8 /* HeroTransition+UIViewControllerTransitioningDelegate.swift */; };
B17D888D1EF5A5500048D3E8 /* HeroTransition+UIViewControllerTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B17D888B1EF5A5500048D3E8 /* HeroTransition+UIViewControllerTransitioningDelegate.swift */; };
- B185A4E61DFA6E0C00C3B85D /* ListTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B185A4E51DFA6E0C00C3B85D /* ListTableViewController.swift */; };
- B185A4E81DFA6FE200C3B85D /* GridCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B185A4E71DFA6FE200C3B85D /* GridCollectionViewController.swift */; };
- B19F76991E46C38E002DBC58 /* AppleHomePage.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76981E46C38E002DBC58 /* AppleHomePage.storyboard */; };
- B19F769D1E46C3A2002DBC58 /* Basic.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F769A1E46C3A2002DBC58 /* Basic.storyboard */; };
- B19F769E1E46C3A2002DBC58 /* Menu.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F769B1E46C3A2002DBC58 /* Menu.storyboard */; };
- B19F769F1E46C3A2002DBC58 /* MusicPlayer.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F769C1E46C3A2002DBC58 /* MusicPlayer.storyboard */; };
- B19F76A11E46C3C2002DBC58 /* CityGuide.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76A01E46C3C2002DBC58 /* CityGuide.storyboard */; };
- B19F76A31E46C3CB002DBC58 /* ListToGrid.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76A21E46C3CB002DBC58 /* ListToGrid.storyboard */; };
- B19F76A61E46C3D7002DBC58 /* ImageGallery.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76A41E46C3D7002DBC58 /* ImageGallery.storyboard */; };
- B19F76A71E46C3D7002DBC58 /* ImageViewer.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76A51E46C3D7002DBC58 /* ImageViewer.storyboard */; };
- B19F76B11E46C449002DBC58 /* VideoPlayer.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76AF1E46C449002DBC58 /* VideoPlayer.storyboard */; };
- B19F76B21E46C449002DBC58 /* VideoPlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B19F76B01E46C449002DBC58 /* VideoPlayerViewController.swift */; };
B1D816DF1EF5A5DF007B9776 /* HeroViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D816DE1EF5A5DF007B9776 /* HeroViewControllerDelegate.swift */; };
B1D816E01EF5A5DF007B9776 /* HeroViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D816DE1EF5A5DF007B9776 /* HeroViewControllerDelegate.swift */; };
B1D816E21EF5A630007B9776 /* HeroTransition+CustomTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D816E11EF5A630007B9776 /* HeroTransition+CustomTransition.swift */; };
@@ -160,6 +127,13 @@
B1D816EC1EF5A720007B9776 /* HeroTransition+Animate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D816EA1EF5A720007B9776 /* HeroTransition+Animate.swift */; };
B1D834041F02E7C0009E1E36 /* ConditionalPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D834031F02E7C0009E1E36 /* ConditionalPreprocessor.swift */; };
B1D834051F02E7C0009E1E36 /* ConditionalPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D834031F02E7C0009E1E36 /* ConditionalPreprocessor.swift */; };
+ DBA05BB41A704A4A17967918 /* Pods_HeroTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FFA357ACB279D3F74CDEE /* Pods_HeroTests.framework */; };
+ F482F0BE235D7808002E97ED /* UIColor+HexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = F482F0BD235D7808002E97ED /* UIColor+HexString.swift */; };
+ F482F0BF235D7808002E97ED /* UIColor+HexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = F482F0BD235D7808002E97ED /* UIColor+HexString.swift */; };
+ F482F0C0235D7A3A002E97ED /* ImageGalleryCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3499D9E1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift */; };
+ F482F0C1235D7A51002E97ED /* ImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF831DF2717900A03345 /* ImageViewController.swift */; };
+ F482F0C2235D7A5B002E97ED /* ImageCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF891DF647FC00A03345 /* ImageCells.swift */; };
+ F482F0C3235D7A65002E97ED /* ImageLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A313499A1E1E2AED00EB5139 /* ImageLibrary.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -211,6 +185,8 @@
4D307DF320E3C6DC00DD9F65 /* HeroModifier+Advanced.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HeroModifier+Advanced.swift"; sourceTree = ""; };
5C69728F2002CDBD001A5051 /* HeroCompatible.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeroCompatible.swift; sourceTree = ""; };
5CD4F09A588E81DA75C2BE38 /* Pods-HeroExamples.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroExamples.debug.xcconfig"; path = "Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.debug.xcconfig"; sourceTree = ""; };
+ 5CEC69C9A9A60129002FD931 /* Pods-HeroTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-HeroTests/Pods-HeroTests.release.xcconfig"; sourceTree = ""; };
+ 841FFA357ACB279D3F74CDEE /* Pods_HeroTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HeroTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
86C87C73D89E75C8443B5071 /* Pods-HeroTvOSExamples.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroTvOSExamples.debug.xcconfig"; path = "Pods/Target Support Files/Pods-HeroTvOSExamples/Pods-HeroTvOSExamples.debug.xcconfig"; sourceTree = ""; };
A304BF831DF2717900A03345 /* ImageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageViewController.swift; sourceTree = ""; };
A304BF891DF647FC00A03345 /* ImageCells.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageCells.swift; sourceTree = ""; };
@@ -308,7 +284,10 @@
B1D816EA1EF5A720007B9776 /* HeroTransition+Animate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HeroTransition+Animate.swift"; sourceTree = ""; };
B1D834031F02E7C0009E1E36 /* ConditionalPreprocessor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConditionalPreprocessor.swift; sourceTree = ""; };
C377744CBFF1E24426E80F55 /* Pods-HeroExamples.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroExamples.release.xcconfig"; path = "Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.release.xcconfig"; sourceTree = ""; };
+ C51A6465EC2CB38D82F28B93 /* Pods-HeroTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-HeroTests/Pods-HeroTests.debug.xcconfig"; sourceTree = ""; };
EEE340F89FF0A49DD23A5A6E /* Pods_HeroExamples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HeroExamples.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F482F0BD235D7808002E97ED /* UIColor+HexString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+HexString.swift"; sourceTree = ""; };
+ F482F0C5235D7C4C002E97ED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = ""; };
FD2306FDA4E15ADA91EFED44 /* Pods_HeroTvOSExamples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HeroTvOSExamples.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
@@ -349,6 +328,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ DBA05BB41A704A4A17967918 /* Pods_HeroTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -360,6 +340,7 @@
children = (
EEE340F89FF0A49DD23A5A6E /* Pods_HeroExamples.framework */,
FD2306FDA4E15ADA91EFED44 /* Pods_HeroTvOSExamples.framework */,
+ 841FFA357ACB279D3F74CDEE /* Pods_HeroTests.framework */,
);
name = Frameworks;
sourceTree = "";
@@ -375,6 +356,7 @@
A37D7B4A1E2C0C9300AC1959 /* UIKit+Hero.swift */,
B101B2C91E561408007E7112 /* UIView+Hero.swift */,
B101B2CD1E561421007E7112 /* UIViewController+Hero.swift */,
+ F482F0BD235D7808002E97ED /* UIColor+HexString.swift */,
);
path = Extensions;
sourceTree = "";
@@ -434,6 +416,8 @@
C377744CBFF1E24426E80F55 /* Pods-HeroExamples.release.xcconfig */,
86C87C73D89E75C8443B5071 /* Pods-HeroTvOSExamples.debug.xcconfig */,
A41D45F75C2C4244CC105281 /* Pods-HeroTvOSExamples.release.xcconfig */,
+ C51A6465EC2CB38D82F28B93 /* Pods-HeroTests.debug.xcconfig */,
+ 5CEC69C9A9A60129002FD931 /* Pods-HeroTests.release.xcconfig */,
);
name = Pods;
sourceTree = "";
@@ -767,6 +751,7 @@
isa = PBXNativeTarget;
buildConfigurationList = AF1E1B581E66822C00ECE039 /* Build configuration list for PBXNativeTarget "HeroTests" */;
buildPhases = (
+ 3673D17D1C42FCAD03311A99 /* [CP] Check Pods Manifest.lock */,
AF1E1B4D1E66822C00ECE039 /* Sources */,
AF1E1B4E1E66822C00ECE039 /* Frameworks */,
AF1E1B4F1E66822C00ECE039 /* Resources */,
@@ -827,6 +812,7 @@
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
+ English,
en,
Base,
);
@@ -875,20 +861,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- B19F76A11E46C3C2002DBC58 /* CityGuide.storyboard in Resources */,
- B19F769D1E46C3A2002DBC58 /* Basic.storyboard in Resources */,
- B19F769E1E46C3A2002DBC58 /* Menu.storyboard in Resources */,
- B19F76B11E46C449002DBC58 /* VideoPlayer.storyboard in Resources */,
- A32D2D101E4E14DD008D35FF /* BuiltInTransitions.storyboard in Resources */,
- B19F76A61E46C3D7002DBC58 /* ImageGallery.storyboard in Resources */,
- B147F2661FAEA8F0006475A3 /* Navigation.storyboard in Resources */,
- B19F76A31E46C3CB002DBC58 /* ListToGrid.storyboard in Resources */,
- B19F76991E46C38E002DBC58 /* AppleHomePage.storyboard in Resources */,
- B19F769F1E46C3A2002DBC58 /* MusicPlayer.storyboard in Resources */,
A33E60AF1DE761C90065CBD8 /* LaunchScreen.storyboard in Resources */,
- B19F76A71E46C3D7002DBC58 /* ImageViewer.storyboard in Resources */,
A33E60AC1DE761C90065CBD8 /* Assets.xcassets in Resources */,
- A33E60AA1DE761C90065CBD8 /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -908,18 +882,38 @@
files = (
);
inputPaths = (
- "${SRCROOT}/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh",
- "${BUILT_PRODUCTS_DIR}/ChameleonFramework/ChameleonFramework.framework",
+ "${PODS_ROOT}/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/CollectionKit/CollectionKit.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ChameleonFramework.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CollectionKit.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 3673D17D1C42FCAD03311A99 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-HeroTests-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
89DC76B30A0BF7FD724C24D3 /* [CP] Check Pods Manifest.lock */ = {
@@ -1033,13 +1027,14 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- A32D2CFA1E4A80C7008D35FF /* ImageLibrary.swift in Sources */,
- A32D2CF81E4A80C3008D35FF /* ImageGalleryCollectionViewController.swift in Sources */,
+ F482F0C0235D7A3A002E97ED /* ImageGalleryCollectionViewController.swift in Sources */,
A32D2CFC1E4A80DC008D35FF /* UIKit+HeroExamples.swift in Sources */,
2D1F7FE71E49DD90004D944B /* TVImageGalleryViewController.swift in Sources */,
- A32D2CF91E4A80C5008D35FF /* ImageViewController.swift in Sources */,
+ F482F0BF235D7808002E97ED /* UIColor+HexString.swift in Sources */,
+ F482F0C1235D7A51002E97ED /* ImageViewController.swift in Sources */,
+ F482F0C3235D7A65002E97ED /* ImageLibrary.swift in Sources */,
+ F482F0C2235D7A5B002E97ED /* ImageCells.swift in Sources */,
2D1F7FE51E49DD90004D944B /* AppDelegate.swift in Sources */,
- A32D2CFB1E4A80C9008D35FF /* ImageCells.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1101,31 +1096,15 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- A35949181E1A2BE60095F407 /* LegacyExampleViewController.swift in Sources */,
- A33E60C01DE7621C0065CBD8 /* CityGuideViewController.swift in Sources */,
- B114B6901E412A0B0009CEDE /* AppleProductViewController.swift in Sources */,
+ F482F0BE235D7808002E97ED /* UIColor+HexString.swift in Sources */,
A33E60BD1DE7621C0065CBD8 /* UIKit+HeroExamples.swift in Sources */,
A3D060C820834FF100E48927 /* AppStoreCardExample.swift in Sources */,
- A3499D9F1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift in Sources */,
A3D060C420833D0400E48927 /* MatchExample.swift in Sources */,
- B16A21A01E4E3907007B8B4C /* AnimationSelectTableViewController.swift in Sources */,
- A33E60BF1DE7621C0065CBD8 /* CityGuideCell.swift in Sources */,
A3D060C020833B0800E48927 /* BuiltInTransitionExample.swift in Sources */,
A33E60A51DE761C90065CBD8 /* AppDelegate.swift in Sources */,
- A33E60BE1DE7621C0065CBD8 /* City.swift in Sources */,
- A304BF841DF2717900A03345 /* ImageViewController.swift in Sources */,
- B185A4E61DFA6E0C00C3B85D /* ListTableViewController.swift in Sources */,
A3D060C6208348CB00E48927 /* MatchInCollectionExample.swift in Sources */,
- A33E60C11DE7621C0065CBD8 /* CityViewController.swift in Sources */,
- B185A4E81DFA6FE200C3B85D /* GridCollectionViewController.swift in Sources */,
- A32D2D0D1E4D545B008D35FF /* MenuViewController.swift in Sources */,
- B147F2651FAEA8F0006475A3 /* FirstViewController.swift in Sources */,
A3D060C220833B4E00E48927 /* ExampleBaseViewController.swift in Sources */,
- A304BF8A1DF647FC00A03345 /* ImageCells.swift in Sources */,
- B1275D971E4C0D850099A0E9 /* PluginViewController.swift in Sources */,
A3B8C5672083376100E112F6 /* MainViewController.swift in Sources */,
- B19F76B21E46C449002DBC58 /* VideoPlayerViewController.swift in Sources */,
- A313499B1E1E2AED00EB5139 /* ImageLibrary.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1171,6 +1150,7 @@
isa = PBXVariantGroup;
children = (
A33E60A91DE761C90065CBD8 /* Base */,
+ F482F0C5235D7C4C002E97ED /* en */,
);
name = Main.storyboard;
path = .;
@@ -1202,6 +1182,7 @@
INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MARKETING_VERSION = 1.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.Hero;
PRODUCT_NAME = Hero;
SDKROOT = appletvos;
@@ -1228,6 +1209,7 @@
INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MARKETING_VERSION = 1.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.Hero;
PRODUCT_NAME = Hero;
SDKROOT = appletvos;
@@ -1250,6 +1232,7 @@
DEVELOPMENT_TEAM = 4VSEW78TKT;
INFOPLIST_FILE = TvOSExamples/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MARKETING_VERSION = 1.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.HeroTvOSExamples;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
@@ -1269,6 +1252,7 @@
DEVELOPMENT_TEAM = 4VSEW78TKT;
INFOPLIST_FILE = TvOSExamples/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MARKETING_VERSION = 1.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.HeroTvOSExamples;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
@@ -1295,6 +1279,7 @@
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MARKETING_VERSION = 1.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.Hero;
PRODUCT_NAME = Hero;
SKIP_INSTALL = YES;
@@ -1321,6 +1306,7 @@
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MARKETING_VERSION = 1.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.Hero;
PRODUCT_NAME = Hero;
SKIP_INSTALL = YES;
@@ -1448,12 +1434,12 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 5CD4F09A588E81DA75C2BE38 /* Pods-HeroExamples.debug.xcconfig */;
buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
DEVELOPMENT_TEAM = 683UGRW72Z;
INFOPLIST_FILE = "$(SRCROOT)/Examples/Resources/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MARKETING_VERSION = 1.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.HeroExamples;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.2;
@@ -1465,12 +1451,12 @@
isa = XCBuildConfiguration;
baseConfigurationReference = C377744CBFF1E24426E80F55 /* Pods-HeroExamples.release.xcconfig */;
buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
DEVELOPMENT_TEAM = 683UGRW72Z;
INFOPLIST_FILE = "$(SRCROOT)/Examples/Resources/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MARKETING_VERSION = 1.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.HeroExamples;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.2;
@@ -1480,6 +1466,7 @@
};
AF1E1B591E66822C00ECE039 /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = C51A6465EC2CB38D82F28B93 /* Pods-HeroTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
DEVELOPMENT_TEAM = 4VSEW78TKT;
@@ -1495,6 +1482,7 @@
};
AF1E1B5A1E66822C00ECE039 /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 5CEC69C9A9A60129002FD931 /* Pods-HeroTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
DEVELOPMENT_TEAM = 4VSEW78TKT;
diff --git a/LegacyExamples/Base.lproj/Main.storyboard b/LegacyExamples/Base.lproj/Main.storyboard
index aa1e8f19..031561f4 100644
--- a/LegacyExamples/Base.lproj/Main.storyboard
+++ b/LegacyExamples/Base.lproj/Main.storyboard
@@ -1,12 +1,9 @@
-
-
-
-
+
+
-
-
+
@@ -15,7 +12,7 @@
-
+
diff --git a/LegacyExamples/Examples/AppleHomePage/AppleHomePage.storyboard b/LegacyExamples/Examples/AppleHomePage/AppleHomePage.storyboard
index 9912ff20..0b9f95d4 100644
--- a/LegacyExamples/Examples/AppleHomePage/AppleHomePage.storyboard
+++ b/LegacyExamples/Examples/AppleHomePage/AppleHomePage.storyboard
@@ -1,11 +1,9 @@
-
-
-
-
+
+
-
+
@@ -56,7 +54,7 @@
-
+
@@ -66,7 +64,7 @@
SERIES 2
-
+
diff --git a/LegacyExamples/en.lproj/Main.strings b/LegacyExamples/en.lproj/Main.strings
new file mode 100644
index 00000000..4e36dfd6
--- /dev/null
+++ b/LegacyExamples/en.lproj/Main.strings
@@ -0,0 +1,12 @@
+
+/* Class = "UILabel"; text = "Built-in"; ObjectID = "IIL-pF-BfF"; */
+"IIL-pF-BfF.text" = "Built-in";
+
+/* Class = "UITabBarItem"; title = "Plugins"; ObjectID = "bDK-79-b3B"; */
+"bDK-79-b3B.title" = "Plugins";
+
+/* Class = "UILabel"; text = "HeroDebugPlugin"; ObjectID = "fUh-RG-Pga"; */
+"fUh-RG-Pga.text" = "HeroDebugPlugin";
+
+/* Class = "UIViewController"; title = "Plugins"; ObjectID = "uv4-Wk-GeR"; */
+"uv4-Wk-GeR.title" = "Plugins";
diff --git a/Podfile b/Podfile
index 34934364..8182c4de 100644
--- a/Podfile
+++ b/Podfile
@@ -3,8 +3,11 @@
target 'HeroExamples' do
platform :ios, '9.0'
use_frameworks!
- pod "CollectionKit"
- pod 'ChameleonFramework/Swift', :git => 'https://github.com/ViccAlexander/Chameleon.git'
+ pod 'CollectionKit'
+
+ target 'HeroTests' do
+ inherit! :search_paths
+ end
end
target 'HeroTvOSExamples' do
diff --git a/Podfile.lock b/Podfile.lock
index 79235d32..cff3af08 100644
--- a/Podfile.lock
+++ b/Podfile.lock
@@ -1,32 +1,18 @@
PODS:
- - ChameleonFramework/Default (2.1.0)
- - ChameleonFramework/Swift (2.1.0):
- - ChameleonFramework/Default
- CollectionKit (2.2.0):
- CollectionKit/Core (= 2.2.0)
- CollectionKit/Core (2.2.0)
DEPENDENCIES:
- - ChameleonFramework/Swift (from `https://github.com/ViccAlexander/Chameleon.git`)
- CollectionKit
SPEC REPOS:
- https://github.com/cocoapods/specs.git:
+ https://github.com/CocoaPods/Specs.git:
- CollectionKit
-EXTERNAL SOURCES:
- ChameleonFramework:
- :git: https://github.com/ViccAlexander/Chameleon.git
-
-CHECKOUT OPTIONS:
- ChameleonFramework:
- :commit: 6dd284bde21ea2e7f9fd89bc36f40df16e16369d
- :git: https://github.com/ViccAlexander/Chameleon.git
-
SPEC CHECKSUMS:
- ChameleonFramework: d21a3cc247abfe5e37609a283a8238b03575cf64
CollectionKit: 5caa5341860d4c9b748ebfeaab97530b2d02c7c0
-PODFILE CHECKSUM: 126cdb5cfac9a9e2d2e798696131fd8758b6c34d
+PODFILE CHECKSUM: efc6b025c2cee81dcc6fa480009618ed1af56837
-COCOAPODS: 1.5.3
+COCOAPODS: 1.8.4
diff --git a/Sources/Extensions/CAMediaTimingFunction+Hero.swift b/Sources/Extensions/CAMediaTimingFunction+Hero.swift
index 57fcfcb8..3e093e0b 100644
--- a/Sources/Extensions/CAMediaTimingFunction+Hero.swift
+++ b/Sources/Extensions/CAMediaTimingFunction+Hero.swift
@@ -21,6 +21,7 @@
// THE SOFTWARE.
import UIKit
+import QuartzCore
public extension CAMediaTimingFunction {
// default
diff --git a/Sources/Extensions/UIColor+HexString.swift b/Sources/Extensions/UIColor+HexString.swift
new file mode 100644
index 00000000..2a6092c5
--- /dev/null
+++ b/Sources/Extensions/UIColor+HexString.swift
@@ -0,0 +1,33 @@
+//
+// UIColor+HexString.swift
+// Hero
+//
+// Created by Joseph Mattiello on 10/21/19.
+// Copyright © 2019 Luke Zhao. All rights reserved.
+//
+
+import UIKit
+
+extension UIColor {
+ convenience init?(hexString hex: String) {
+ var cString: String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
+
+ if cString.hasPrefix("#") {
+ cString.remove(at: cString.startIndex)
+ }
+
+ guard cString.count == 6 else {
+ return nil
+ }
+
+ var rgbValue: UInt64 = 0
+ Scanner(string: cString).scanHexInt64(&rgbValue)
+
+ self.init(
+ red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
+ green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
+ blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
+ alpha: CGFloat(1.0)
+ )
+ }
+}
diff --git a/Sources/Extensions/UIView+Hero.swift b/Sources/Extensions/UIView+Hero.swift
index baad480a..95cbb6e6 100644
--- a/Sources/Extensions/UIView+Hero.swift
+++ b/Sources/Extensions/UIView+Hero.swift
@@ -116,34 +116,34 @@ public extension UIView {
}
// TODO: can be moved to internal later (will still be accessible via IB)
- @available(*, deprecated, message: "Use hero.id instead")
+ @available(*, renamed: "hero.id")
@IBInspectable var heroID: String? {
get { return hero.id }
set { hero.id = newValue }
}
// TODO: can be moved to internal later (will still be accessible via IB)
- @available(*, deprecated, message: "Use hero.isEnabled instead")
+ @available(*, renamed: "hero.isEnabled")
@IBInspectable var isHeroEnabled: Bool {
get { return hero.isEnabled }
set { hero.isEnabled = newValue }
}
// TODO: can be moved to internal later (will still be accessible via IB)
- @available(*, deprecated, message: "Use hero.isEnabledForSubviews instead")
+ @available(*, renamed: "hero.isEnabledForSubviews")
@IBInspectable var isHeroEnabledForSubviews: Bool {
get { return hero.isEnabledForSubviews }
set { hero.isEnabledForSubviews = newValue }
}
- @available(*, deprecated, message: "Use hero.modifiers instead")
+ @available(*, renamed: "hero.modifiers")
var heroModifiers: [HeroModifier]? {
get { return hero.modifiers }
set { hero.modifiers = newValue }
}
// TODO: can be moved to internal later (will still be accessible via IB)
- @available(*, deprecated, message: "Use hero.modifierString instead")
+ @available(*, renamed: "hero.modifierString")
@IBInspectable var heroModifierString: String? {
get { fatalError("Reverse lookup is not supported") }
set { hero.modifiers = newValue?.parse() }
@@ -188,7 +188,7 @@ public extension UIView {
}
}
- @available(*, deprecated, message: "Use hero.storedAplha instead")
+ @available(*, renamed: "hero.storedAplha")
internal var heroStoredAlpha: CGFloat? {
get { return hero.storedAlpha }
set { hero.storedAlpha = newValue }
diff --git a/Sources/Extensions/UIViewController+Hero.swift b/Sources/Extensions/UIViewController+Hero.swift
index 0b9d3872..4670d868 100644
--- a/Sources/Extensions/UIViewController+Hero.swift
+++ b/Sources/Extensions/UIViewController+Hero.swift
@@ -100,7 +100,7 @@ public extension UIViewController {
static var heroConfig = "heroConfig"
}
- @available(*, deprecated, message: "Use hero.config instead")
+ @available(*, renamed: "hero.config")
internal var heroConfig: HeroViewControllerConfig {
get { return hero.config }
set { hero.config = newValue }
@@ -116,25 +116,25 @@ public extension UIViewController {
set { hero.config.previousTabBarDelegate = newValue }
}
- @available(*, deprecated, message: "Use hero.storedSnapshot instead")
+ @available(*, renamed: "hero.storedSnapshot")
internal var heroStoredSnapshot: UIView? {
get { return hero.config.storedSnapshot }
set { hero.config.storedSnapshot = newValue }
}
- @available(*, deprecated, message: "Use hero.modalAnimationType instead")
+ @available(*, renamed: "hero.modalAnimationType")
var heroModalAnimationType: HeroDefaultAnimationType {
get { return hero.modalAnimationType }
set { hero.modalAnimationType = newValue }
}
- @available(*, deprecated, message: "Use hero.modalAnimationTypeString instead")
+ @available(*, renamed: "hero.modalAnimationTypeString")
@IBInspectable var heroModalAnimationTypeString: String? {
get { return hero.modalAnimationTypeString }
set { hero.modalAnimationTypeString = newValue }
}
- @available(*, deprecated, message: "Use hero.isEnabled instead")
+ @available(*, renamed: "hero.isEnabled")
@IBInspectable var isHeroEnabled: Bool {
get { return hero.isEnabled }
set { hero.isEnabled = newValue }
@@ -156,14 +156,14 @@ public extension HeroExtension where Base: UINavigationController {
}
extension UINavigationController {
- @available(*, deprecated, message: "Use hero.navigationAnimationType instead")
+ @available(*, renamed: "hero.navigationAnimationType")
public var heroNavigationAnimationType: HeroDefaultAnimationType {
get { return hero.navigationAnimationType }
set { hero.navigationAnimationType = newValue }
}
// TODO: can be moved to internal later (will still be accessible via IB)
- @available(*, deprecated, message: "Use hero.navigationAnimationTypeString instead")
+ @available(*, renamed: "hero.navigationAnimationTypeString")
@IBInspectable public var heroNavigationAnimationTypeString: String? {
get { return hero.navigationAnimationTypeString }
set { hero.navigationAnimationTypeString = newValue }
@@ -185,14 +185,14 @@ public extension HeroExtension where Base: UITabBarController {
}
public extension UITabBarController {
- @available(*, deprecated, message: "Use hero.tabBarAnimationType instead")
+ @available(*, renamed: "hero.tabBarAnimationType")
var heroTabBarAnimationType: HeroDefaultAnimationType {
get { return hero.tabBarAnimationType }
set { hero.tabBarAnimationType = newValue }
}
// TODO: can be moved to internal later (will still be accessible via IB)
- @available(*, deprecated, message: "Use hero.tabBarAnimationTypeString instead")
+ @available(*, renamed: "hero.tabBarAnimationTypeString")
@IBInspectable var heroTabBarAnimationTypeString: String? {
get { return hero.tabBarAnimationTypeString }
set { hero.tabBarAnimationTypeString = newValue }
@@ -242,7 +242,7 @@ public extension HeroExtension where Base: UIViewController {
Unwind to a view controller that the matchBlock returns true on.
*/
func unwindToViewController(withMatchBlock: (UIViewController) -> Bool) {
- var target: UIViewController? = nil
+ var target: UIViewController?
var current: UIViewController? = base
while target == nil && current != nil {
@@ -332,49 +332,49 @@ public extension HeroExtension where Base: UIViewController {
}
extension UIViewController {
- @available(*, deprecated, message: "use hero.dismissViewController instead")
+ @available(*, renamed: "hero.dismissViewController")
@IBAction public func ht_dismiss(_ sender: UIView) {
hero.dismissViewController()
}
- @available(*, deprecated, message: "use hero.replaceViewController(with:) instead")
+ @available(*, renamed: "hero.replaceViewController(with:)")
public func heroReplaceViewController(with next: UIViewController) {
hero.replaceViewController(with: next)
}
// TODO: can be moved to internal later (will still be accessible via IB)
- @available(*, deprecated, message: "Use hero.dismissViewController instead")
+ @available(*, renamed: "hero.dismissViewController")
@IBAction public func hero_dismissViewController() {
hero.dismissViewController()
}
// TODO: can be moved to internal later (will still be accessible via IB)
- @available(*, deprecated, message: "Use hero.unwindToRootViewController instead")
+ @available(*, renamed: "hero.unwindToRootViewController")
@IBAction public func hero_unwindToRootViewController() {
hero.unwindToRootViewController()
}
- @available(*, deprecated, message: "Use hero.unwindToViewController(_:) instead")
+ @available(*, renamed: "hero.unwindToViewController(_:)")
public func hero_unwindToViewController(_ toViewController: UIViewController) {
hero.unwindToViewController(toViewController)
}
- @available(*, deprecated, message: "Use hero.unwindToViewController(withSelector:) instead")
+ @available(*, renamed: "hero.unwindToViewController(withSelector:)")
public func hero_unwindToViewController(withSelector: Selector) {
hero.unwindToViewController(withSelector: withSelector)
}
- @available(*, deprecated, message: "Use hero_unwindToViewController(withClass:) instead")
+ @available(*, renamed: "hero_unwindToViewController(withClass:)")
public func hero_unwindToViewController(withClass: AnyClass) {
hero.unwindToViewController(withClass: withClass)
}
- @available(*, deprecated, message: "Use hero.unwindToViewController(withMatchBlock:) instead")
+ @available(*, renamed: "hero.unwindToViewController(withMatchBlock:)")
public func hero_unwindToViewController(withMatchBlock: (UIViewController) -> Bool) {
hero.unwindToViewController(withMatchBlock: withMatchBlock)
}
- @available(*, deprecated, message: "Use hero.replaceViewController(with:) instead")
+ @available(*, renamed: "hero.replaceViewController(with:)")
public func hero_replaceViewController(with next: UIViewController) {
hero.replaceViewController(with: next)
}
diff --git a/Sources/HeroCompatible.swift b/Sources/HeroCompatible.swift
index a4c59cbe..c95e1afe 100644
--- a/Sources/HeroCompatible.swift
+++ b/Sources/HeroCompatible.swift
@@ -31,6 +31,7 @@ public protocol HeroCompatible {
public extension HeroCompatible {
var hero: HeroExtension {
get { return HeroExtension(self) }
+ // swiftlint:disable unused_setter_value
set { }
}
}
diff --git a/Sources/Info.plist b/Sources/Info.plist
index 9f9016ae..ec0cc7b0 100644
--- a/Sources/Info.plist
+++ b/Sources/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 1.3.1
+ $(MARKETING_VERSION)
CFBundleVersion
$(CURRENT_PROJECT_VERSION)
NSPrincipalClass
diff --git a/Sources/Preprocessors/CascadePreprocessor.swift b/Sources/Preprocessors/CascadePreprocessor.swift
index 17fefc19..d3d40a13 100644
--- a/Sources/Preprocessors/CascadePreprocessor.swift
+++ b/Sources/Preprocessors/CascadePreprocessor.swift
@@ -29,8 +29,8 @@ public enum CascadeDirection {
case bottomToTop
case leftToRight
case rightToLeft
- case radial(center:CGPoint)
- case inverseRadial(center:CGPoint)
+ case radial(center: CGPoint)
+ case inverseRadial(center: CGPoint)
var comparator: (UIView, UIView) -> Bool {
switch self {
case .topToBottom:
@@ -70,11 +70,11 @@ public enum CascadeDirection {
return nil
}
}
-
+
public static var leadingToTrailing: CascadeDirection {
return UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? .leftToRight : .rightToLeft
}
-
+
public static var trailingToLeading: CascadeDirection {
return UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? .rightToLeft : .leftToRight
}
diff --git a/Sources/Preprocessors/DefaultAnimationPreprocessor.swift b/Sources/Preprocessors/DefaultAnimationPreprocessor.swift
index 622e2bac..048af948 100644
--- a/Sources/Preprocessors/DefaultAnimationPreprocessor.swift
+++ b/Sources/Preprocessors/DefaultAnimationPreprocessor.swift
@@ -36,16 +36,16 @@ public enum HeroDefaultAnimationType {
default: return nil
}
}
-
+
public static var leading: Direction {
return UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? .left : .right
}
-
+
public static var trailing: Direction {
return UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? .right : .left
}
}
-
+
public enum Strategy {
case forceLeftToRight, forceRightToLeft, userInterface
func defaultDirection(presenting: Bool) -> Direction {
@@ -59,7 +59,7 @@ public enum HeroDefaultAnimationType {
}
}
}
-
+
case auto
case push(direction: Direction)
case pull(direction: Direction)
diff --git a/Sources/SwiftSupport.swift b/Sources/SwiftSupport.swift
index d2b4507f..b601818c 100644
--- a/Sources/SwiftSupport.swift
+++ b/Sources/SwiftSupport.swift
@@ -47,6 +47,3 @@ extension RunLoop {
}
}
#endif
-
-
-
diff --git a/Sources/Transition/HeroTransition.swift b/Sources/Transition/HeroTransition.swift
index fc5d2167..a645db8d 100644
--- a/Sources/Transition/HeroTransition.swift
+++ b/Sources/Transition/HeroTransition.swift
@@ -70,11 +70,11 @@ open class HeroTransition: NSObject {
public var isTransitioning: Bool { return state != .possible }
public internal(set) var isPresenting: Bool = true
- @available(*, deprecated, message: "Use isTransitioning instead")
+ @available(*, renamed: "isTransitioning")
public var transitioning: Bool {
return isTransitioning
}
- @available(*, deprecated, message: "Use isPresenting instead")
+ @available(*, renamed: "isPresenting")
public var presenting: Bool {
return isPresenting
}
diff --git a/TvOSExamples/Info.plist b/TvOSExamples/Info.plist
index 4327cd91..125dcc5b 100644
--- a/TvOSExamples/Info.plist
+++ b/TvOSExamples/Info.plist
@@ -17,7 +17,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.0
+ $(MARKETING_VERSION)
CFBundleVersion
1
LSRequiresIPhoneOS
diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md
deleted file mode 100644
index 7ed93124..00000000
--- a/docs/ChangeLog.md
+++ /dev/null
@@ -1,193 +0,0 @@
-## 0.3.2
-* new properties for specifying default animations
-```swift
-extension UIViewController {
- /// default hero animation type for presenting & dismissing modally
- public var heroModalAnimationType: HeroDefaultAnimationType
-}
-extension UINavigationController {
- /// default hero animation type for push and pop within the navigation controller
- public var heroNavigationAnimationType: HeroDefaultAnimationType
-}
-extension UITabBarController {
- /// default hero animation type for switching tabs within the tab bar controller
- public var heroTabBarAnimationType: HeroDefaultAnimationType
-}
-```
-* bug fixes https://github.com/lkzhao/Hero/issues/90 https://github.com/lkzhao/Hero/issues/85
-* basic support for animating UIVisualEffectView's effect property in iOS 10
-
-## 0.3.0
-* support `.overFullScreen` modalPresentationStyle
-* Implement many new default transitions. (fade was the only default transition before this update)
-
- * **.push(direction: Direction)**
- * **.pull(direction: Direction)**
- * **.cover(direction: Direction)**
- * **.uncover(direction: Direction)**
- * **.slide(direction: Direction)**
- * **.zoomSlide(direction: Direction)**
- * **.pageIn(direction: Direction)**
- * **.pageOut(direction: Direction)**
-
-* a few new modifiers:
- * **beginWith(modifiers:[HeroModifier])**
- * **durationMatchLongest**
- * **overlay(color:UIColor, opacity:CGFloat)**
- * **masksToBounds(_ masksToBounds: Bool)**
-
-## 0.1.7
-* fix a zPosition regression introduced in 0.1.5
-
-## 0.1.6
-* fix a regression introduced in 0.1.5 where animation for matched view might appear inconsistent.
-
-## 0.1.5
-* fix a bug where toViewController's delegate callbacks are not being called
-* fix a bug where fromViewController's delegate callbacks receive incorrect parameters.
-* Add **useScaleBasedSizeChange** modifier.
- Force Hero use scale based size animation. This will convert all `.size` modifier into `.scale` modifier.
- This is to help Hero animate layers that doesn't support bounds animation. Also gives better performance when animating.
-
-* fix a few bugs with `.useNoSnapshot`
-* new video player example.
-
-## 0.1.4
-* fix a bug where changing orientation doesn't affect previous VC. https://github.com/lkzhao/Hero/issues/60
-* fix a bug where the presented view controller has incorrect frame. https://github.com/lkzhao/Hero/issues/63, https://github.com/lkzhao/Hero/issues/56
-* New **snapshot type** modifiers:
- * **useOptimizedSnapshot**
-
- With this modifier, Hero will create snapshot optimized for different view type when animating.
- For custom views or views with masking, useOptimizedSnapshot might create snapshots
- that appear differently than the actual view.
- In that case, use .useNormalSnapshot or .useSlowRenderSnapshot to disable the optimization.
- * **useNormalSnapshot**
-
- Create snapshot using snapshotView(afterScreenUpdates:).
- * **useLayerRenderSnapshot**
-
- Create snapshot using layer.render(in: currentContext).
- This is slower than .useNormalSnapshot but gives more accurate snapshot for some views (eg. UIStackView).
- * **useNoSnapshot**
-
- Force Hero to not create any snapshot when animating this view. Hence Hero will animate on the view directly.
- This will mess up the view hierarchy. Therefore, view controllers have to rebuild its view structure after the transition finishes.
-
-* New navigation extension on UIViewController (mainly to support **unwinding**):
- * **func hero_dismissViewController()**
-
- Dismiss the current view controller with animation. Will perform a navigationController.popViewController
- if the current view controller is contained inside a navigationController.
- * **func hero_replaceViewController(with:UIViewController)**
-
- Replace the current view controller with another VC on the navigation/modal stack.
- * **func hero_unwindToRootViewController()**
-
- Unwind to the root view controller using Hero.
- * **func hero_unwindToViewController(_ toViewController:)**
-
- Unwind to a specific view controller using Hero.
- * **func hero_unwindToViewController(withSelector: Selector)**
-
- Unwind to a view controller that responds to the given selector using Hero.
- * **func hero_unwindToViewController(withClass: AnyClass)**
-
- Unwind to a view controller with given class using Hero.
- * **func hero_unwindToViewController(withMatchBlock: (UIViewController) -> Bool)**
-
- Unwind to a view controller that the match block returns true on.
-
-## 0.1.3
-* Support **local coordinate space**.
-
- | Global coordinate space | Local (parent's) coordinate space |
- | ---- | ---- |
- | Animating views are **not** affected by parent views' attributes | Animating views are affected by parent views' attributes |
- | When parent view moves, subviews that have its own modifiers do **not** move with the parent view. I.e. they are being taken out of the view hierarchy. | When parent view moves, subviews that have its own modifiers move along with the parent view. I.e. similar to how a view behave when its parent view moves. |
- | Used for matched views & views with `source` modifier. Global is the default prior to 0.1.3 | Local is the default coordinate space after 0.1.3 |
-
-* New **useGlobalCoordinateSpace** modifier. Force the view to use global coordinate space. I.e. won't move with its parent view.
-
-## 0.1.2
-* `HeroPlugin` returning .infinity duration will be treated as wanting interactive transition
-* few bug fixes.
-* Update plugin API protocol to be more concise.
-
-## 0.1.1
-* Swift Package Manager Support, Thanks to [@mRs-](https://github.com/mRs-)
-* Bug fixes #41, #36, & #38
-* Cleaner navigation bar animation.
-* Better alpha animation support.
-
-## 0.1.0
-* add **HeroModifier** class and **HeroTargetState** struct
- * **HeroModifier** is a swift enum-like class that provides the same functionality of the original string-based **heroModifiers**.
- * **HeroTargetState** is a struct that holds view state informations. It can be build from **[HeroModifier]**. Mostly used internally and for building **HeroPlugin**.
-* change the original `heroModifiers:String?` to `heroModifierString:String?` **(breaking change!)**
-* add `heroModifiers:[HeroModifier]?` to **UIView**
-* add a shared singleton `Hero` object for controlling the interactive transition. Which can be accessed by `Hero.shared`
-* few changes to the protocols
- * protocol **HeroAnimator**
-
- ```swift
- func temporarilySet(view:UIView, to modifiers:HeroModifiers)
- // to
- func temporarilySet(view:UIView, targetState:HeroTargetState)
- ```
- * protocol **HeroViewControllerDelegate**
-
- ```swift
- @objc optional func wantInteractiveHeroTransition(context:HeroInteractiveContext) -> Bool
- // to
- @objc optional func wantInteractiveHeroTransition() -> Bool
- ```
- * remove **HeroInteractiveContext** protocol
-* update **HeroPlugin** to conform to the new protocols definitions.
-* rename a few modifiers:
- * **curve** → **timingFunction**
- * **sourceID** → **source**
- * **clearSubviewModifiers** → **ignoreSubviewModifiers**
-* fix a bug with `heroReplaceViewController` API. [PR 30](https://github.com/lkzhao/Hero/pull/30)
-* fix a bug with **UIStackView** not animating correctly. [PR 22](https://github.com/lkzhao/Hero/pull/22)
-* add **recursive** `ignoreSubviewModifiers` modifier
-* add **radial** & **inverseRadial** cascade:
-
-
-
-### To migrate from previous versions:
-
-Do a whole-project **find & replace**(cmd+option+shift+F) for:
-
- * **heroModifiers** → **heroModifierString**
- * **curve** → **timingFunction**
- * **sourceID** → **source**
- * **clearSubviewModifiers** → **ignoreSubviewModifiers**
-
- Remember to also replace these inside the storyboard. In code, please migrate to the new type-safe `heroModifiers`. It provides better type-checking and more functionality.
-
-## 0.0.5
-* Add live injection example
-* Make `snapshotView` available to all HeroAnimators.
-* Add `heroWillStartTransition` & `heroDidEndTransition` callbacks to `HeroViewControllerDelegate`
-* Fix animation for UIStackView https://github.com/lkzhao/Hero/pull/18
-* Smoother UIImageView animation for bounds change https://github.com/lkzhao/Hero/pull/16
-
-## 0.0.4
-* Add Carthage support
-
-## 0.0.3
-* Cleaner resume animation after an interactive transition.
-* plugin API: `seekTo(progress:Double)` changed to `seekTo(timePassed:TimeInterval)`
-* plugin API: `resume(progress:Double, reverse:Bool)` changed to `resume(timePassed:TimeInterval, reverse:Bool)`
-* provides dynamic duration by default.
- [material design(duration & timing)](https://material.io/guidelines/motion/duration-easing.html#duration-easing-dynamic-durations)
-
-## 0.0.2
-* rename `clearSubviewClasses` to `clearSubviewModifiers`. was a naming mistake.
-* set default animation to be CABasicAnimation with the **Standard Curve** from [material design (easing)](https://material.io/guidelines/motion/duration-easing.html#duration-easing-natural-easing-curves).
-* add the new **arc** effect from [material design (movement)](https://material.io/guidelines/motion/movement.html#movement-movement-within-screen-bounds).
-* add **arc** effect to **Basic**, **Menu**, & **ListToGrid** examples.
-* add the ability to show arc path in the Debug Plugin.
-* ignore `HeroModifiers` for source view when matched with a target view with the same `HeroID`
-* some small optimization & bug fixes
\ No newline at end of file
diff --git a/docs/Classes.html b/docs/Classes.html
new file mode 100644
index 00000000..39344cc0
--- /dev/null
+++ b/docs/Classes.html
@@ -0,0 +1,821 @@
+
+
+
+ Classes Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Classes Reference
+
+
+
+
+
+
+
+
+
+
+
Classes
+
The following classes are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class HeroDebugPlugin : HeroPlugin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class HeroExtension < Base >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class HeroContext
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public final class HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class Lexer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class ExprNode : CustomStringConvertible , Equatable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class NumberNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class VariableNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class BinaryOpNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class CallNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class PrototypeNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class FunctionNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class Parser
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open class HeroTransition : NSObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The singleton class/object for controlling interactive transitions.
+
Hero . shared
+
+
Use the following methods for controlling the interactive transition:
+
func update ( progress : Double )
+func end ()
+func cancel ()
+func apply ( modifiers :[ HeroModifier ], to view : UIView )
+
+
+
See more
+
+
+
Declaration
+
+
Swift
+
public class Hero : NSObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/BinaryOpNode.html b/docs/Classes/BinaryOpNode.html
new file mode 100644
index 00000000..3a440f25
--- /dev/null
+++ b/docs/Classes/BinaryOpNode.html
@@ -0,0 +1,388 @@
+
+
+
+ BinaryOpNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ BinaryOpNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
BinaryOpNode
+
+
+
public class BinaryOpNode : ExprNode
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/CallNode.html b/docs/Classes/CallNode.html
new file mode 100644
index 00000000..e9afa8ea
--- /dev/null
+++ b/docs/Classes/CallNode.html
@@ -0,0 +1,358 @@
+
+
+
+ CallNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ CallNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
CallNode
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public let arguments : [ ExprNode ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( name : String , arguments : [ ExprNode ])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/ExprNode.html b/docs/Classes/ExprNode.html
new file mode 100644
index 00000000..a91c1514
--- /dev/null
+++ b/docs/Classes/ExprNode.html
@@ -0,0 +1,387 @@
+
+
+
+ ExprNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ ExprNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
ExprNode
+
+
+
public class ExprNode : CustomStringConvertible , Equatable
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var range : CountableRange < Int >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public let name : String
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( name : String )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/FunctionNode.html b/docs/Classes/FunctionNode.html
new file mode 100644
index 00000000..c8350ea1
--- /dev/null
+++ b/docs/Classes/FunctionNode.html
@@ -0,0 +1,388 @@
+
+
+
+ FunctionNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ FunctionNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
FunctionNode
+
+
+
public class FunctionNode : ExprNode
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/Hero.html b/docs/Classes/Hero.html
new file mode 100644
index 00000000..e3a4a05b
--- /dev/null
+++ b/docs/Classes/Hero.html
@@ -0,0 +1,306 @@
+
+
+
+ Hero Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Hero Class Reference
+
+
+
+
+
+
+
+
+
+
+
Hero
+
+
+
public class Hero : NSObject
+
+
+
+
The singleton class/object for controlling interactive transitions.
+
Hero . shared
+
+
Use the following methods for controlling the interactive transition:
+
func update ( progress : Double )
+func end ()
+func cancel ()
+func apply ( modifiers :[ HeroModifier ], to view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Shared singleton object for controlling the transition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/HeroContext.html b/docs/Classes/HeroContext.html
new file mode 100644
index 00000000..a7482f4c
--- /dev/null
+++ b/docs/Classes/HeroContext.html
@@ -0,0 +1,618 @@
+
+
+
+ HeroContext Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroContext Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroContext
+
+
+
public class HeroContext
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The container holding all of the animating views
+
+
+
+
Declaration
+
+
Swift
+
public let container : UIView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A flattened list of all views from source ViewController
+
+
+
+
Declaration
+
+
Swift
+
public var fromViews : [ UIView ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A flattened list of all views from destination ViewController
+
+
+
+
Declaration
+
+
Swift
+
public var toViews : [ UIView ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func sourceView ( for heroID : String ) -> UIView ?
+
+
+
+
+
Return Value
+
a source view matching the heroID, nil if not found
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func destinationView ( for heroID : String ) -> UIView ?
+
+
+
+
+
Return Value
+
a destination view matching the heroID, nil if not found
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func pairedView ( for view : UIView ) -> UIView ?
+
+
+
+
+
Return Value
+
a view with the same heroID, but on different view controller, nil if not found
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func snapshotView ( for view : UIView ) -> UIView
+
+
+
+
+
Return Value
+
a snapshot view for animation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public subscript ( view : UIView ) -> HeroTargetState ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func clean ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hide ( view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func unhide ( view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/HeroDebugPlugin.html b/docs/Classes/HeroDebugPlugin.html
new file mode 100644
index 00000000..cb8e7adc
--- /dev/null
+++ b/docs/Classes/HeroDebugPlugin.html
@@ -0,0 +1,373 @@
+
+
+
+ HeroDebugPlugin Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroDebugPlugin Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroDebugPlugin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/HeroExtension.html b/docs/Classes/HeroExtension.html
new file mode 100644
index 00000000..3ba263ea
--- /dev/null
+++ b/docs/Classes/HeroExtension.html
@@ -0,0 +1,895 @@
+
+
+
+ HeroExtension Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroExtension Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroExtension
+
+
+
public class HeroExtension < Base >
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public let base : Base
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ID is the identifier for the view. When doing a transition between two view controllers,
+Hero will search through all the subviews for both view controllers and matches views with the same heroID .
+
+
Whenever a pair is discovered,
+Hero will automatically transit the views from source state to the destination state.
+
+
+
+
Declaration
+
+
Swift
+
public var id : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
isEnabled allows to specify whether a view and its subviews should be consider for animations.
+If true, Hero will search through all the subviews for heroIds and modifiers. Defaults to true
+
+
+
+
Declaration
+
+
Swift
+
public var isEnabled : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
isEnabledForSubviews allows to specify whether a view’s subviews should be consider for animations.
+If true, Hero will search through all the subviews for heroIds and modifiers. Defaults to true
+
+
+
+
Declaration
+
+
Swift
+
public var isEnabledForSubviews : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Use modifiers to specify animations alongside the main transition. Checkout HeroModifier.swift
for available modifiers.
+
+
+
+
Declaration
+
+
Swift
+
public var modifiers : [ HeroModifier ]? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
modifierString** provides another way to set modifiers . It can be assigned through storyboard.
+
+
+
+
Declaration
+
+
Swift
+
public var modifierString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
default hero animation type for presenting & dismissing modally
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var modalAnimationTypeString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isEnabled : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
default hero animation type for push and pop within the navigation controller
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var navigationAnimationTypeString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
default hero animation type for switching tabs within the tab bar controller
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var tabBarAnimationTypeString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Dismiss the current view controller with animation. Will perform a navigationController.popViewController
+if the current view controller is contained inside a navigationController
+
+
+
+
Declaration
+
+
Swift
+
public func dismissViewController ( completion : (() -> Void )? = nil )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Unwind to the root view controller using Hero
+
+
+
+
Declaration
+
+
Swift
+
public func unwindToRootViewController ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Unwind to a specific view controller using Hero
+
+
+
+
Declaration
+
+
Swift
+
public func unwindToViewController ( _ toViewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func unwindToViewController ( withSelector : Selector )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Unwind to a view controller with given class using Hero
+
+
+
+
Declaration
+
+
Swift
+
public func unwindToViewController ( withClass : AnyClass )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Unwind to a view controller that the matchBlock returns true on.
+
+
+
+
Declaration
+
+
Swift
+
public func unwindToViewController ( withMatchBlock : ( UIViewController ) -> Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Replace the current view controller with another VC on the navigation/modal stack.
+
+
+
+
Declaration
+
+
Swift
+
public func replaceViewController ( with next : UIViewController , completion : (() -> Void )? = nil )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/HeroModifier.html b/docs/Classes/HeroModifier.html
new file mode 100644
index 00000000..6280f738
--- /dev/null
+++ b/docs/Classes/HeroModifier.html
@@ -0,0 +1,2650 @@
+
+
+
+ HeroModifier Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroModifier Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroModifier
+
+
+
public final class HeroModifier
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( applyFunction : @escaping ( inout HeroTargetState ) -> Void )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Apply modifiers directly to the view at the start of the transition.
+The modifiers supplied here won’t be animated.
+For source views, modifiers are set directly at the beginning of the animation.
+For destination views, they replace the target state (final appearance).
+
+
+
+
Declaration
+
+
Swift
+
public static func beginWith ( _ modifiers : [ HeroModifier ]) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func beginWith ( modifiers : [ HeroModifier ]) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func beginWith ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Use global coordinate space.
+
+
When using global coordinate space. The view become a independent view that is not a subview of any view.
+It won’t move when its parent view moves, and won’t be affected by parent view’s attributes.
+
+
When a view is matched, this is automatically enabled.
+The source
modifier will also enable this.
+
+
Global coordinate space is default for all views prior to version 0.1.3
+
+
+
+
Declaration
+
+
Swift
+
public static var useGlobalCoordinateSpace : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ignore all heroModifiers attributes for a view’s direct subviews.
+
+
+
+
Declaration
+
+
Swift
+
public static var ignoreSubviewModifiers : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ignore all heroModifiers attributes for a view’s subviews.
+
+
+recursive: if false, will only ignore direct subviews’ modifiers. default false.
+
+
+
+
+
Declaration
+
+
Swift
+
public static func ignoreSubviewModifiers ( recursive : Bool = false ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Will create snapshot optimized for different view type.
+For custom views or views with masking, useOptimizedSnapshot might create snapshots
+that appear differently than the actual view.
+In that case, use .useNormalSnapshot or .useSlowRenderSnapshot to disable the optimization.
+
+
This modifier actually does nothing by itself since .useOptimizedSnapshot is the default.
+
+
+
+
Declaration
+
+
Swift
+
public static var useOptimizedSnapshot : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Create snapshot using snapshotView(afterScreenUpdates:).
+
+
+
+
Declaration
+
+
Swift
+
public static var useNormalSnapshot : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Create snapshot using layer.render(in: currentContext).
+This is slower than .useNormalSnapshot but gives more accurate snapshot for some views (eg. UIStackView).
+
+
+
+
Declaration
+
+
Swift
+
public static var useLayerRenderSnapshot : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Force Hero to not create any snapshot when animating this view.
+This will mess up the view hierarchy, therefore, view controllers have to rebuild
+its view structure after the transition finishes.
+
+
+
+
Declaration
+
+
Swift
+
public static var useNoSnapshot : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Force the view to animate.
+
+
By default, Hero will not animate if the view is outside the screen bounds or if there is no animatable hero modifier, unless this modifier is used.
+
+
+
+
Declaration
+
+
Swift
+
public static var forceAnimate : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Force Hero use scale based size animation. This will convert all .size modifier into .scale modifier.
+This is to help Hero animate layers that doesn’t support bounds animation. Also gives better performance.
+
+
+
+
Declaration
+
+
Swift
+
public static var useScaleBasedSizeChange : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func from ( node : ExprNode ) -> HeroModifier ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Fade the view during transition
+
+
+
+
Declaration
+
+
Swift
+
public static var fade : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Force don’t fade view during transition
+
+
+
+
Declaration
+
+
Swift
+
public static var forceNonFade : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the position for the view to animate from/to.
+
+
+
+
Declaration
+
+
Swift
+
public static func position ( _ position : CGPoint ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ position
+
+
+
+
+
position for the view to animate from/to
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the size for the view to animate from/to.
+
+
+
+
Declaration
+
+
Swift
+
public static func size ( _ size : CGSize ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ size
+
+
+
+
+
size for the view to animate from/to
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the transform for the view to animate from/to. Will override previous perspective, scale, translate, & rotate modifiers
+
+
+
+
Declaration
+
+
Swift
+
public static func transform ( _ t : CATransform3D ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ t
+
+
+
+
+
the CATransform3D object
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the perspective on the transform. use in combination with the rotate modifier.
+
+
+
+
Declaration
+
+
Swift
+
public static func perspective ( _ perspective : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ perspective
+
+
+
+
+
set the camera distance of the transform
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func scale ( x : CGFloat = 1 , y : CGFloat = 1 , z : CGFloat = 1 ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ x
+
+
+
+
+
scale factor on x axis, default 1
+
+
+
+
+
+
+ y
+
+
+
+
+
scale factor on y axis, default 1
+
+
+
+
+
+
+ z
+
+
+
+
+
scale factor on z axis, default 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Scale in x & y axis
+
+
+
+
Declaration
+
+
Swift
+
public static func scale ( _ xy : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ xy
+
+
+
+
+
scale factor in both x & y axis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func translate ( x : CGFloat = 0 , y : CGFloat = 0 , z : CGFloat = 0 ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ x
+
+
+
+
+
translation distance on x axis in display pixel, default 0
+
+
+
+
+
+
+ y
+
+
+
+
+
translation distance on y axis in display pixel, default 0
+
+
+
+
+
+
+ z
+
+
+
+
+
translation distance on z axis in display pixel, default 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func translate ( _ point : CGPoint , z : CGFloat = 0 ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func rotate ( x : CGFloat = 0 , y : CGFloat = 0 , z : CGFloat = 0 ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ x
+
+
+
+
+
rotation on x axis in radian, default 0
+
+
+
+
+
+
+ y
+
+
+
+
+
rotation on y axis in radian, default 0
+
+
+
+
+
+
+ z
+
+
+
+
+
rotation on z axis in radian, default 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func rotate ( _ point : CGPoint , z : CGFloat = 0 ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func rotate ( _ z : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ z
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the opacity for the view to animate from/to.
+
+
+
+
Declaration
+
+
Swift
+
public static func opacity ( _ opacity : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ opacity
+
+
+
+
+
opacity for the view to animate from/to
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the backgroundColor for the view to animate from/to.
+
+
+backgroundColor: backgroundColor for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func backgroundColor ( _ backgroundColor : UIColor ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the cornerRadius for the view to animate from/to.
+
+
+
+
Declaration
+
+
Swift
+
public static func cornerRadius ( _ cornerRadius : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ cornerRadius
+
+
+
+
+
cornerRadius for the view to animate from/to
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the zPosition for the view to animate from/to.
+
+
+zPosition: zPosition for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func zPosition ( _ zPosition : CGFloat ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the contentsRect for the view to animate from/to.
+
+
+contentsRect: contentsRect for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func contentsRect ( _ contentsRect : CGRect ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the contentsScale for the view to animate from/to.
+
+
+contentsScale: contentsScale for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func contentsScale ( _ contentsScale : CGFloat ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the borderWidth for the view to animate from/to.
+
+
+borderWidth: borderWidth for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func borderWidth ( _ borderWidth : CGFloat ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the borderColor for the view to animate from/to.
+
+
+borderColor: borderColor for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func borderColor ( _ borderColor : UIColor ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the shadowColor for the view to animate from/to.
+
+
+shadowColor: shadowColor for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func shadowColor ( _ shadowColor : UIColor ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the shadowOpacity for the view to animate from/to.
+
+
+shadowOpacity: shadowOpacity for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func shadowOpacity ( _ shadowOpacity : CGFloat ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the shadowOffset for the view to animate from/to.
+
+
+shadowOffset: shadowOffset for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func shadowOffset ( _ shadowOffset : CGSize ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the shadowRadius for the view to animate from/to.
+
+
+shadowRadius: shadowRadius for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func shadowRadius ( _ shadowRadius : CGFloat ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the shadowPath for the view to animate from/to.
+
+
+shadowPath: shadowPath for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func shadowPath ( _ shadowPath : CGPath ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the masksToBounds for the view to animate from/to.
+
+
+masksToBounds: masksToBounds for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func masksToBounds ( _ masksToBounds : Bool ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Create an overlay on the animating view.
+
+
+
+
Declaration
+
+
Swift
+
public static func overlay ( color : UIColor , opacity : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ color
+
+
+
+
+
+
+
+
+
+ opacity
+
+
+
+
+
opacity of the overlay
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Sets the duration of the animation for a given view. If not used, Hero will use determine the duration based on the distance and size changes.
+
+
Note: a duration of .infinity means matching the duration of the longest animation. same as .durationMatchLongest
+
+
+
+
Declaration
+
+
Swift
+
public static func duration ( _ duration : TimeInterval ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ duration
+
+
+
+
+
duration of the animation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Sets the duration of the animation for a given view to match the longest animation of the transition.
+
+
+
+
Declaration
+
+
Swift
+
public static var durationMatchLongest : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Sets the delay of the animation for a given view.
+
+
+
+
Declaration
+
+
Swift
+
public static func delay ( _ delay : TimeInterval ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ delay
+
+
+
+
+
delay of the animation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Sets the timing function of the animation for a given view. If not used, Hero will use determine the timing function based on whether or not the view is entering or exiting the screen.
+
+
+
+
Declaration
+
+
Swift
+
public static func timingFunction ( _ timingFunction : CAMediaTimingFunction ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ timingFunction
+
+
+
+
+
timing function of the animation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
(iOS 9+) Use spring animation with custom stiffness & damping. The duration will be automatically calculated. Will be ignored if arc, timingFunction, or duration is set.
+
+
+
+
Declaration
+
+
Swift
+
@available ( iOS 9 , * )
+public static func spring ( stiffness : CGFloat , damping : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ stiffness
+
+
+
+
+
stiffness of the spring
+
+
+
+
+
+
+ damping
+
+
+
+
+
damping of the spring
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Transition from/to the state of the view with matching heroID
+Will also force the view to use global coordinate space.
+
+
The following layer properties will be animated from the given view.
+
position
+bounds . size
+cornerRadius
+transform
+shadowColor
+shadowOpacity
+shadowOffset
+shadowRadius
+shadowPath
+
+
+
Note that the following properties won’t be taken from the source view.
+
backgroundColor
+borderWidth
+borderColor
+
+
+
+
+
Declaration
+
+
Swift
+
public static func source ( heroID : String ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ heroID
+
+
+
+
+
the source view’s heroId.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Works in combination with position modifier to apply a natural curve when moving to the destination.
+
+
+
+
Declaration
+
+
Swift
+
public static var arc : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Works in combination with position modifier to apply a natural curve when moving to the destination.
+
+
+
+
Declaration
+
+
Swift
+
public static func arc ( intensity : CGFloat = 1 ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ intensity
+
+
+
+
+
a value of 1 represent a downward natural curve ╰. a value of -1 represent a upward curve ╮.
+default is 1.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Cascade applys increasing delay modifiers to subviews
+
+
+
+
Declaration
+
+
Swift
+
public static var cascade : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Cascade applys increasing delay modifiers to subviews
+
+
+
+
Declaration
+
+
Swift
+
public static func cascade ( delta : TimeInterval = 0.02 ,
+ direction : CascadeDirection = . topToBottom ,
+ delayMatchedViews : Bool = false ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ delta
+
+
+
+
+
delay in between each animation
+
+
+
+
+
+
+ direction
+
+
+
+
+
+
+
+
+
+ delayMatchedViews
+
+
+
+
+
whether or not to delay matched subviews until all cascading animation have started
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Apply modifiers only if the condition return true.
+
+
+
+
Declaration
+
+
Swift
+
public static func when ( _ condition : @escaping ( HeroConditionalContext ) -> Bool , _ modifiers : [ HeroModifier ]) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func when ( _ condition : @escaping ( HeroConditionalContext ) -> Bool , _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func whenMatched ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func whenPresenting ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func whenDismissing ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func whenAppearing ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func whenDisappearing ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/HeroPlugin.html b/docs/Classes/HeroPlugin.html
new file mode 100644
index 00000000..7857f3ad
--- /dev/null
+++ b/docs/Classes/HeroPlugin.html
@@ -0,0 +1,945 @@
+
+
+
+ HeroPlugin Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroPlugin Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroPlugin
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Determines whether or not to receive seekTo
callback on every frame.
+
+
Default is false.
+
+
When requirePerFrameCallback is false , the plugin needs to start its own animations inside animate
& resume
+The seekTo
method is only being called during an interactive transition.
+
+
When requirePerFrameCallback is true , the plugin will receive seekTo
callback on every animation frame. Hence it is possible for the plugin to do per-frame animations without implementing animate
& resume
+
+
+
+
Declaration
+
+
Swift
+
open var requirePerFrameCallback : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override required init ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Called before any animation.
+Override this method when you want to preprocess modifiers for views
+
+
To check a view’s modifiers:
+
context [ view ]
+context [ view , "modifierName" ]
+
+
+
To set a view’s modifiers:
+
context [ view ] = [( "modifier1" , [ "parameter1" ]), ( "modifier2" , [])]
+context [ view , "modifier1" ] = [ "parameter1" , "parameter2" ]
+
+
+
+
+
Declaration
+
+
Swift
+
open func process ( fromViews : [ UIView ], toViews : [ UIView ])
+
+
+
+
+
Parameters
+
+
+
+
+
+ context
+
+
+
+
+
object holding all parsed and changed modifiers,
+
+
+
+
+
+
+ fromViews
+
+
+
+
+
A flattened list of all views from source ViewController
+
+
+
+
+
+
+ toViews
+
+
+
+
+
A flattened list of all views from destination ViewController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open func canAnimate ( view : UIView , appearing : Bool ) -> Bool
+
+
+
+
+
Parameters
+
+
+
+
+
+ context
+
+
+
+
+
object holding all parsed and changed modifiers,
+
+
+
+
+
+
+ view
+
+
+
+
+
the view to check whether or not the plugin can handle the animation
+
+
+
+
+
+
+ appearing
+
+
+
+
+
true if the view is appearing(i.e. a view in destination ViewController)
+If return true, Hero won’t animate and won’t let any other plugins animate this view.
+The view will also be hidden automatically during the animation.
+
+
+
+
+
+
+
+
Return Value
+
return true if the plugin can handle animating the view.
+
+
+
+
+
+
+
+
+
+
+
+
+
Perform the animation.
+
+
Note: views in fromViews
& toViews
are hidden already. Unhide then if you need to take snapshots.
+
+
+
+
Declaration
+
+
Swift
+
open func animate ( fromViews : [ UIView ], toViews : [ UIView ]) -> TimeInterval
+
+
+
+
+
Parameters
+
+
+
+
+
+ context
+
+
+
+
+
object holding all parsed and changed modifiers,
+
+
+
+
+
+
+ fromViews
+
+
+
+
+
A flattened list of all views from source ViewController (filtered by canAnimate
)
+
+
+
+
+
+
+ toViews
+
+
+
+
+
A flattened list of all views from destination ViewController (filtered by canAnimate
)
+
+
+
+
+
+
+
+
Return Value
+
The duration needed to complete the animation
+
+
+
+
+
+
+
+
+
+
+
+
+
Called when all animations are completed.
+
+
Should perform cleanup and release any reference
+
+
+
+
Declaration
+
+
Swift
+
open func clean ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
For supporting interactive animation only.
+
+
This method is called when an interactive animation is in place
+The plugin should pause the animation, and seek to the given progress
+
+
+
+
Declaration
+
+
Swift
+
open func seekTo ( timePassed : TimeInterval )
+
+
+
+
+
Parameters
+
+
+
+
+
+ timePassed
+
+
+
+
+
time of the animation to seek to.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
For supporting interactive animation only.
+
+
This method is called when an interactive animation is ended
+The plugin should resume the animation.
+
+
+timePassed: will be the same value since last seekTo
+reverse: a boolean value indicating whether or not the animation should reverse
+
+
+
+
+
Declaration
+
+
Swift
+
open func resume ( timePassed : TimeInterval , reverse : Bool ) -> TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
For supporting interactive animation only.
+
+
This method is called when user wants to override animation modifiers during an interactive animation
+
+
+
+
+
Parameters
+
+
+
+
+
+ state
+
+
+
+
+
the target state to override
+
+
+
+
+
+
+ view
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open func changeTarget ( state : HeroTargetState , isDestination : Bool , to view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static var isEnabled : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func enable ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func disable ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/HeroTransition.html b/docs/Classes/HeroTransition.html
new file mode 100644
index 00000000..e295f07c
--- /dev/null
+++ b/docs/Classes/HeroTransition.html
@@ -0,0 +1,1706 @@
+
+
+
+ HeroTransition Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroTransition Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroTransition
+
+
+
open class HeroTransition : NSObject
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var containerColor : UIColor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isUserInteractionEnabled : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isTransitioning : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var isPresenting : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var transitioning : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var presenting : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
container we created to hold all animating views, will be a subview of the
+transitionContainer when transitioning
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var container : UIView !
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
destination view controller
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var toViewController : UIViewController ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
source view controller
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var fromViewController : UIViewController ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
context object holding transition informations
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var context : HeroContext !
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
whether or not we are handling transition interactively
+
+
+
+
Declaration
+
+
Swift
+
public var interactive : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
max duration needed by the animators
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var totalDuration : TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
progress of the current transition. 0 if no transition is happening
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var progress : Double { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override init ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Receive callbacks on each animation frame.
+Observers will be cleaned when transition completes
+
+
+observer: the observer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open func animate ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open func complete ( finished : Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func transition ( from : UIViewController , to : UIViewController , in view : UIView , completion : (( Bool ) -> Void )? = nil )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Update the progress for the interactive transition.
+
+
+progress: the current progress, must be between 0…1
+
+
+
+
+
Declaration
+
+
Swift
+
public func update ( _ percentageComplete : CGFloat )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Finish the interactive transition.
+Will stop the interactive transition and animate from the
+current state to the end state
+
+
+
+
Declaration
+
+
Swift
+
public func finish ( animate : Bool = true )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Cancel the interactive transition.
+Will stop the interactive transition and animate from the
+current state to the beginning state
+
+
+
+
Declaration
+
+
Swift
+
public func cancel ( animate : Bool = true )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Override modifiers during an interactive animation.
+
+
For example:
+
+
Hero.shared.apply([.position(x:50, y:50)], to:view)
+
+
will set the view’s position to 50, 50
+
+
+modifiers: the modifiers to override
+view: the view to override to
+
+
+
+
+
Declaration
+
+
Swift
+
public func apply ( modifiers : [ HeroModifier ], to view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Override target state during an interactive animation.
+
+
For example:
+
+
Hero.shared.changeTarget([.position(x:50, y:50)], to:view)
+
+
will animate the view’s position to 50, 50 once finish(animate:)
is called
+
+
+modifiers: the modifiers to override
+isDestination: if false, it changes the starting state
+view: the view to override to
+
+
+
+
+
Declaration
+
+
Swift
+
public func changeTarget ( modifiers : [ HeroModifier ], isDestination : Bool = true , to view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open func start ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func navigationController ( _ navigationController : UINavigationController , willShow viewController : UIViewController , animated : Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func navigationController ( _ navigationController : UINavigationController , didShow viewController : UIViewController , animated : Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func navigationController ( _ navigationController : UINavigationController , animationControllerFor operation : UINavigationController . Operation , from fromVC : UIViewController , to toVC : UIViewController ) -> UIViewControllerAnimatedTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func navigationController ( _ navigationController : UINavigationController , interactionControllerFor animationController : UIViewControllerAnimatedTransitioning ) -> UIViewControllerInteractiveTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func tabBarController ( _ tabBarController : UITabBarController , shouldSelect viewController : UIViewController ) -> Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func tabBarController ( _ tabBarController : UITabBarController , interactionControllerFor animationController : UIViewControllerAnimatedTransitioning ) -> UIViewControllerInteractiveTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func tabBarController ( _ tabBarController : UITabBarController , animationControllerForTransitionFrom fromVC : UIViewController , to toVC : UIViewController ) -> UIViewControllerAnimatedTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func animationController ( forPresented presented : UIViewController , presenting : UIViewController , source : UIViewController ) -> UIViewControllerAnimatedTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func animationController ( forDismissed dismissed : UIViewController ) -> UIViewControllerAnimatedTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func interactionControllerForDismissal ( using animator : UIViewControllerAnimatedTransitioning ) -> UIViewControllerInteractiveTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func interactionControllerForPresentation ( using animator : UIViewControllerAnimatedTransitioning ) -> UIViewControllerInteractiveTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func animateTransition ( using context : UIViewControllerContextTransitioning )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func transitionDuration ( using transitionContext : UIViewControllerContextTransitioning ?) -> TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func animationEnded ( _ transitionCompleted : Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var wantsInteractiveStart : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func startInteractiveTransition ( _ transitionContext : UIViewControllerContextTransitioning )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/Lexer.html b/docs/Classes/Lexer.html
new file mode 100644
index 00000000..393639ce
--- /dev/null
+++ b/docs/Classes/Lexer.html
@@ -0,0 +1,328 @@
+
+
+
+ Lexer Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Lexer Class Reference
+
+
+
+
+
+
+
+
+
+
+
Lexer
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( input : String )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func tokenize () -> [ Token ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/NumberNode.html b/docs/Classes/NumberNode.html
new file mode 100644
index 00000000..7f87ad22
--- /dev/null
+++ b/docs/Classes/NumberNode.html
@@ -0,0 +1,358 @@
+
+
+
+ NumberNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ NumberNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
NumberNode
+
+
+
public class NumberNode : ExprNode
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public let value : Float
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( value : Float )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/Parser.html b/docs/Classes/Parser.html
new file mode 100644
index 00000000..e1031b72
--- /dev/null
+++ b/docs/Classes/Parser.html
@@ -0,0 +1,328 @@
+
+
+
+ Parser Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Parser Class Reference
+
+
+
+
+
+
+
+
+
+
+
Parser
+
+
+
public class Parser
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( tokens : [ Token ])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func parse () throws -> [ ExprNode ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/PrototypeNode.html b/docs/Classes/PrototypeNode.html
new file mode 100644
index 00000000..1f372c9b
--- /dev/null
+++ b/docs/Classes/PrototypeNode.html
@@ -0,0 +1,358 @@
+
+
+
+ PrototypeNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ PrototypeNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
PrototypeNode
+
+
+
public class PrototypeNode : ExprNode
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public let argumentNames : [ String ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( name : String , argumentNames : [ String ])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Classes/VariableNode.html b/docs/Classes/VariableNode.html
new file mode 100644
index 00000000..a66afe2e
--- /dev/null
+++ b/docs/Classes/VariableNode.html
@@ -0,0 +1,298 @@
+
+
+
+ VariableNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ VariableNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
VariableNode
+
+
+
public class VariableNode : ExprNode
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/ContributionGuide.md b/docs/ContributionGuide.md
deleted file mode 100644
index 05072c55..00000000
--- a/docs/ContributionGuide.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# Issues
-If you run into problems, please open an issue.
-
-When filling bugs, we can best help you if you include the following:
-
-1. Screenshot of video of what happened.
-2. Description of what suppose to happen.
-3. An example project would be nice.
-
-
-# PR
-#### Before you do any work to the library. Be sure to create an issue first!!
-
-We welcome pull requests. By contributing to Hero you agree that your contributions will be licensed under its MIT license. Your work is appreciated!
-
-But before you do any real work, especially framework changes, check if there is any existing issues. Some people might be working on the issues already. For API changes, we need detailed discussion before continuing.
-
-# Ways you can help
-* Help us test the latest master branch.
-* Grab existing issues. (Checkout the project tab for todos, make sure you reply to the issue to let us know that you have started working on it.)
-
-# Code Style
-* 2 space indent
-* follow [Swift Style Guide](https://github.com/raywenderlich/swift-style-guide) as much as possible.
\ No newline at end of file
diff --git a/docs/CoordinateSpace.md b/docs/CoordinateSpace.md
deleted file mode 100644
index 5da6bd25..00000000
--- a/docs/CoordinateSpace.md
+++ /dev/null
@@ -1,21 +0,0 @@
-### Global Coordinate Space (default before 0.1.3)
-
-Animating views are **not** affected by parent views' attributes. Does not move with the parent view. I.e. They are being taken out of the view hierarchy once heroModifiers are applied. Use `useGlobalCoordinateSpace` modifier to force this behavior after 0.1.3.
-
-
-
-### Local Coordinate Space (default after 0.1.3)
-
-Animating views moves along with its parent view. Note that when a view is matched, or when `source` or `useGlobalCoordinateSpace` modifiers are used, the view will go back to global coordinate space.
-
-
-
-For the examples above, the following heroModifiers are applied.
-
-```swift
-greyView.heroModifiers = [.translate(y:100)]
-blackView.heroModifiers = nil
-redView.heroModifiers = [.translate(x:50)]
-```
-
-When using local coordinate space, the view is contained inside a global coordinate spaced view. Other global spaced view might appear on top of these local spaced views. If you want a view to appear on top of another global spaced view, you will have to change it to global spaced as well by using the `useGlobalCoordinateSpace` modifier.
\ No newline at end of file
diff --git a/docs/DefaultAnimations.md b/docs/DefaultAnimations.md
deleted file mode 100644
index dcae74f6..00000000
--- a/docs/DefaultAnimations.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# Default Animations
-
-Starting with **0.3.0**. Hero provides several default transitions. These can also be customized & combined with your custom `heroID` & `heroModifiers`. Makes transitions even easier to implement.
-
-
-
-
-## Methods for changing the default animations
-
-Use the following properties to change default animation type for different presentation methods.
-
-```swift
-extension UIViewController {
- /// default hero animation type for presenting & dismissing modally
- public var heroModalAnimationType: HeroDefaultAnimationType
-}
-extension UINavigationController {
- /// default hero animation type for push and pop within the navigation controller
- public var heroNavigationAnimationType: HeroDefaultAnimationType
-}
-extension UITabBarController {
- /// default hero animation type for switching tabs within the tab bar controller
- public var heroTabBarAnimationType: HeroDefaultAnimationType
-}
-```
-
-## Supported default animations
-
-Please checkout [HeroDefaultAnimations.swift](https://github.com/lkzhao/Hero/blob/master/Sources/HeroDefaultAnimations.swift#L25) for supported animations.
-
-Many of these animations support directions(up, down, left, right).
-
-## .auto Animation Type
-
-`.auto` is the default animation type. It uses the following animations depending on the presentation style:
-
-* `.none` if source root view or destination root view have existing animations (defined via `heroID` or `heroModifiers`).
-* `.push` & `.pull` if animating within a UINavigationController.
-* `.slide` if animating within a UITabbarController.
-* `.fade` if presenting modally.
-* `.none` if presenting modally with `modalPresentationStyle == .overFullScreen`.
-
-## .selectBy(presenting:, dismissing:) Animation Type
-
-Will determine the animation type by whether or not we are presenting or dismissing.
-
-For example:
-
-```swift
-.selectBy(presenting:.push(.left), dismissing:.pull(.right))
-```
-
-Will use left push animation if presenting a VC, or right pull animation when dismissing a VC.
-
-## Note
-
-Other than `.auto` & `.none`, default animations will override `heroModifiers` on source & destination root views during the transition.
\ No newline at end of file
diff --git a/docs/Enums.html b/docs/Enums.html
new file mode 100644
index 00000000..104d4fbf
--- /dev/null
+++ b/docs/Enums.html
@@ -0,0 +1,534 @@
+
+
+
+ Enumerations Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Enumerations Reference
+
+
+
+
+
+
+
+
+
+
+
Enumerations
+
The following enumerations are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum HeroSnapshotType
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum HeroCoordinateSpace
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum HeroViewOrderingStrategy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum Token
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum ParseError : Error
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum CascadeDirection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum HeroDefaultAnimationType
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum HeroTransitionState : Int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Enums/CascadeDirection.html b/docs/Enums/CascadeDirection.html
new file mode 100644
index 00000000..c32bf493
--- /dev/null
+++ b/docs/Enums/CascadeDirection.html
@@ -0,0 +1,508 @@
+
+
+
+ CascadeDirection Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ CascadeDirection Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
CascadeDirection
+
+
+
public enum CascadeDirection
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case topToBottom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case bottomToTop
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case leftToRight
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case rightToLeft
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case radial ( center : CGPoint )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case inverseRadial ( center : CGPoint )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static var leadingToTrailing : CascadeDirection { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static var trailingToLeading : CascadeDirection { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Enums/HeroCoordinateSpace.html b/docs/Enums/HeroCoordinateSpace.html
new file mode 100644
index 00000000..c66ce6a2
--- /dev/null
+++ b/docs/Enums/HeroCoordinateSpace.html
@@ -0,0 +1,328 @@
+
+
+
+ HeroCoordinateSpace Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroCoordinateSpace Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
HeroCoordinateSpace
+
+
+
public enum HeroCoordinateSpace
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case global
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Enums/HeroDefaultAnimationType.html b/docs/Enums/HeroDefaultAnimationType.html
new file mode 100644
index 00000000..d2a2fa93
--- /dev/null
+++ b/docs/Enums/HeroDefaultAnimationType.html
@@ -0,0 +1,844 @@
+
+
+
+ HeroDefaultAnimationType Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroDefaultAnimationType Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
HeroDefaultAnimationType
+
+
+
public enum HeroDefaultAnimationType
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum Strategy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case push ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case pull ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case cover ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case uncover ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case slide ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case zoomSlide ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case pageIn ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case pageOut ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case zoomOut
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
indirect case selectBy ( presenting : HeroDefaultAnimationType , dismissing : HeroDefaultAnimationType )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func autoReverse ( presenting : HeroDefaultAnimationType ) -> HeroDefaultAnimationType
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var label : String ? { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func from ( node : ExprNode ) -> HeroDefaultAnimationType ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Enums/HeroDefaultAnimationType/Direction.html b/docs/Enums/HeroDefaultAnimationType/Direction.html
new file mode 100644
index 00000000..877cb861
--- /dev/null
+++ b/docs/Enums/HeroDefaultAnimationType/Direction.html
@@ -0,0 +1,478 @@
+
+
+
+ Direction Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Direction Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
Direction
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func from ( node : ExprNode ) -> Direction ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static var leading : Direction { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static var trailing : Direction { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Enums/HeroDefaultAnimationType/Strategy.html b/docs/Enums/HeroDefaultAnimationType/Strategy.html
new file mode 100644
index 00000000..b583e381
--- /dev/null
+++ b/docs/Enums/HeroDefaultAnimationType/Strategy.html
@@ -0,0 +1,358 @@
+
+
+
+ Strategy Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Strategy Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
Strategy
+
+
+
public enum Strategy
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case forceLeftToRight
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case forceRightToLeft
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case userInterface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Enums/HeroSnapshotType.html b/docs/Enums/HeroSnapshotType.html
new file mode 100644
index 00000000..2be51fcb
--- /dev/null
+++ b/docs/Enums/HeroSnapshotType.html
@@ -0,0 +1,393 @@
+
+
+
+ HeroSnapshotType Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroSnapshotType Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
HeroSnapshotType
+
+
+
public enum HeroSnapshotType
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Will optimize for different type of views
+For custom views or views with masking, .optimizedDefault might create snapshots
+that appear differently than the actual view.
+In that case, use .normal or .slowRender to disable the optimization
+
+
+
+
Declaration
+
+
Swift
+
case optimized
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
snapshotView(afterScreenUpdates:)
+
+
+
+
Declaration
+
+
Swift
+
case normal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
layer.render(in: currentContext)
+
+
+
+
Declaration
+
+
Swift
+
case layerRender
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
will not create snapshot. animate the view directly.
+This will mess up the view hierarchy, therefore, view controllers have to rebuild
+its view structure after the transition finishes
+
+
+
+
Declaration
+
+
Swift
+
case noSnapshot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Enums/HeroTransitionState.html b/docs/Enums/HeroTransitionState.html
new file mode 100644
index 00000000..3d100544
--- /dev/null
+++ b/docs/Enums/HeroTransitionState.html
@@ -0,0 +1,418 @@
+
+
+
+ HeroTransitionState Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroTransitionState Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
HeroTransitionState
+
+
+
public enum HeroTransitionState : Int
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case possible
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case notified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case starting
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case animating
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case completing
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Enums/HeroViewOrderingStrategy.html b/docs/Enums/HeroViewOrderingStrategy.html
new file mode 100644
index 00000000..b7531b28
--- /dev/null
+++ b/docs/Enums/HeroViewOrderingStrategy.html
@@ -0,0 +1,358 @@
+
+
+
+ HeroViewOrderingStrategy Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroViewOrderingStrategy Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
HeroViewOrderingStrategy
+
+
+
public enum HeroViewOrderingStrategy
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case sourceViewOnTop
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case destinationViewOnTop
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Enums/ParseError.html b/docs/Enums/ParseError.html
new file mode 100644
index 00000000..26ec7263
--- /dev/null
+++ b/docs/Enums/ParseError.html
@@ -0,0 +1,448 @@
+
+
+
+ ParseError Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ ParseError Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
ParseError
+
+
+
public enum ParseError : Error
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case unexpectToken
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case undefinedOperator ( String )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case expectCharacter ( Character )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case expectExpression
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case expectArgumentList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case expectFunctionName
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Enums/Token.html b/docs/Enums/Token.html
new file mode 100644
index 00000000..41cccbb6
--- /dev/null
+++ b/docs/Enums/Token.html
@@ -0,0 +1,448 @@
+
+
+
+ Token Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Token Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
Token
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case identifier ( String , CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case number ( Float , CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case parensOpen ( CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case parensClose ( CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case comma ( CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case other ( String , CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Extensions.html b/docs/Extensions.html
new file mode 100644
index 00000000..b875e14d
--- /dev/null
+++ b/docs/Extensions.html
@@ -0,0 +1,548 @@
+
+
+
+ Extensions Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Extensions Reference
+
+
+
+
+
+
+
+
+
+
+
Extensions
+
The following extensions are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
extension HeroDebugView : UIGestureRecognizerDelegate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public extension CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
extension CATransform3D : Equatable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public extension UIView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public extension UIViewController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
extension UINavigationController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
extension UITabBarController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public extension String
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Extensions/CAMediaTimingFunction.html b/docs/Extensions/CAMediaTimingFunction.html
new file mode 100644
index 00000000..53ebe48c
--- /dev/null
+++ b/docs/Extensions/CAMediaTimingFunction.html
@@ -0,0 +1,567 @@
+
+
+
+ CAMediaTimingFunction Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ CAMediaTimingFunction Extension Reference
+
+
+
+
+
+
+
+
+
+
+
CAMediaTimingFunction
+
+
+
public extension CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let linear : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let easeIn : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let easeOut : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let easeInOut : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let standard : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let deceleration : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let acceleration : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let sharp : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let easeOutBack : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
static func from ( name : String ) -> CAMediaTimingFunction ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Extensions/CATransform3D.html b/docs/Extensions/CATransform3D.html
new file mode 100644
index 00000000..7766c3dd
--- /dev/null
+++ b/docs/Extensions/CATransform3D.html
@@ -0,0 +1,296 @@
+
+
+
+ CATransform3D Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ CATransform3D Extension Reference
+
+
+
+
+
+
+
+
+
+
+
CATransform3D
+
+
+
extension CATransform3D : Equatable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func == ( lhs : CATransform3D , rhs : CATransform3D ) -> Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Extensions/HeroDebugView.html b/docs/Extensions/HeroDebugView.html
new file mode 100644
index 00000000..fea8b8e5
--- /dev/null
+++ b/docs/Extensions/HeroDebugView.html
@@ -0,0 +1,279 @@
+
+
+
+ HeroDebugView Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroDebugView Extension Reference
+
+
+
+
+
+
+
diff --git a/docs/Extensions/String.html b/docs/Extensions/String.html
new file mode 100644
index 00000000..49b8309a
--- /dev/null
+++ b/docs/Extensions/String.html
@@ -0,0 +1,297 @@
+
+
+
+ String Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ String Extension Reference
+
+
+
+
+
+
+
+
+
+
+
String
+
+
+
public extension String
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func match ( regex : String ) -> ( String , CountableRange < Int > )?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Extensions/UINavigationController.html b/docs/Extensions/UINavigationController.html
new file mode 100644
index 00000000..cd585556
--- /dev/null
+++ b/docs/Extensions/UINavigationController.html
@@ -0,0 +1,279 @@
+
+
+
+ UINavigationController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ UINavigationController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
UINavigationController
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Extensions/UITabBarController.html b/docs/Extensions/UITabBarController.html
new file mode 100644
index 00000000..d3578269
--- /dev/null
+++ b/docs/Extensions/UITabBarController.html
@@ -0,0 +1,328 @@
+
+
+
+ UITabBarController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ UITabBarController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
UITabBarController
+
+
+
extension UITabBarController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+public var heroTabBarAnimationTypeString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Extensions/UIView.html b/docs/Extensions/UIView.html
new file mode 100644
index 00000000..83f6ec6f
--- /dev/null
+++ b/docs/Extensions/UIView.html
@@ -0,0 +1,421 @@
+
+
+
+ UIView Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ UIView Extension Reference
+
+
+
+
+
+
+
+
+
+
+
UIView
+
+
+
public extension UIView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+var heroID : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+var isHeroEnabled : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+var isHeroEnabledForSubviews : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var heroModifiers : [ HeroModifier ]? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+var heroModifierString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Extensions/UIViewController.html b/docs/Extensions/UIViewController.html
new file mode 100644
index 00000000..c662f574
--- /dev/null
+++ b/docs/Extensions/UIViewController.html
@@ -0,0 +1,636 @@
+
+
+
+ UIViewController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ UIViewController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
UIViewController
+
+
+
public extension UIViewController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+public var heroModalAnimationTypeString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+public var isHeroEnabled : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBAction
+public func ht_dismiss ( _ sender : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func heroReplaceViewController ( with next : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBAction
+public func hero_dismissViewController ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBAction
+public func hero_unwindToRootViewController ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hero_unwindToViewController ( _ toViewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hero_unwindToViewController ( withSelector : Selector )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hero_unwindToViewController ( withClass : AnyClass )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hero_unwindToViewController ( withMatchBlock : ( UIViewController ) -> Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hero_replaceViewController ( with next : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Functions.html b/docs/Functions.html
new file mode 100644
index 00000000..a44d8efa
--- /dev/null
+++ b/docs/Functions.html
@@ -0,0 +1,292 @@
+
+
+
+ Functions Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Functions Reference
+
+
+
+
+
+
+
+
+
+
+
Functions
+
The following functions are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/HeroModifiers.md b/docs/HeroModifiers.md
deleted file mode 100644
index 2f0f855a..00000000
--- a/docs/HeroModifiers.md
+++ /dev/null
@@ -1,90 +0,0 @@
-#### Checkout [HeroModifier.swift](https://github.com/lkzhao/Hero/blob/master/Sources/HeroModifier.swift) for up-to-date modifier details.
-
-### Basic Modifiers
-* fade
-* position
-* size
-* scale
-* rotate
-* perspective
-* translate
-* zPosition
-* opacity
-* shadowOpacity
-* shadowRadius
-* shadowColor
-* shadowOffset
-* shadowPath
-* borderColor
-* borderWidth
-
-### Advance Modifiers
-
-| Modifier Name | Description |
-| --- | --- |
-| delay(time) | Delay for the animation |
-| duration(time) | Duration for the animation, if unspecified, the duration will be calculated based on the distance travelled |
-| timingFunction(curveName) | Timing function for the animation (`linear`, `easeIn`, `easeOut`, `easeInOut`, `standard`, `deceleration`, `acceleration`, `sharp`) |
-| timingFunction(c1x, c1y, c2x, c2y) | Custom cubic bezier timing function for the animation |
-| spring(stiffness, damping) | **(iOS 9+)** Use spring animation with custom stiffness & damping. The duration will be automatically calculated. Will be ignored if `arc`, `curve`, or `duration` is set. |
-| useGlobalCoordinateSpace | Force the view to use global coordinate space |
-| overlay(color:,opacity) | Animate an overlay on top of the view |
-| source(HeroID) | Transition from a view with given heroID |
-| arc(intensity) | Make position animation follow a natural arc curve. |
-| cascade(deltaDelay, direction, forceMatchedToWait) | Apply increasing delay to view's subview |
-| ignoreSubviewModifiers | Disables all `heroModifiers` for view's direct subviews |
-| useScaleBasedSizeChange | Force Hero use scale based size animation. |
-| useOptimizedSnapshot | Change snapshot type to OptimizedSnapshot, see [Snapshot Types](#snapshot-types) |
-| useNormalSnapshot | Change snapshot type to NormalSnapshot, see [Snapshot Types](#snapshot-types) |
-| useLayerRenderSnapshot | Change snapshot type to LayerRenderSnapshot, see [Snapshot Types](#snapshot-types) |
-| useNoSnapshot | Change snapshot type to NoSnapshot, see [Snapshot Types](#snapshot-types) |
-| beginWith(modifiers:) | Apply modifiers directly to the view at the start of the transition. Without animation. |
-| beginWithIfMatched(modifiers:) | Same as `beginWith` but effective only when matched. |
-
-#### Modifiers Support for matched views
-Some of the modifiers **won't** work with matched views(views with the same `heroID`). These are:
-* fade
-* scale
-* translate
-* rotate
-* transform
-* cascade
-
-NOTE: For other modifiers that works with matched views, the target view's modifiers will be used. the source view's modifiers will be ignored.
-
-## Modifier Details
-
-### Arc Modifier
-When animating `position`, if **arc** is enabled. the view will follow a natural arc curve instead of going to the target position directly. See [material design](https://material.io/guidelines/motion/movement.html#movement-movement-within-screen-bounds) for more details.
-
-The **intensity** parameter is a number that determine the curve's intensity. A value of 0 means no curve. A value of 1 means a natural downward curve. This value can be negative or above 1. Default is 1.
-
-Use the debug plugin and enable **Show Curves** to see the actual arc curve objects follows.
-
-### Source Modifier
-The `source` modifier allows a view to be transitioned from a view with the given heroID.
-
-##### See the Menu Example for how `source` is used.
-
-### Cascade Modifier
-
-The `cascade` modifier automatically applies increasing `delay` heroModifiers to a view's direct subviews.
-
-| Parameters | Description |
-| --- | --- |
-| deltaDelay | delay in between each animation |
-| direction | the cascade direction, can be `topToBottom`, `bottomToTop`, `leftToRight`, & `rightToLeft`, default `topToBottom` |
-| forceMatchedToWait | whether or not to delay matched views until all cascading animations have started, default false |
-
-NOTE: matched views(views with the same `heroID`) won't have the cascading effect. however, you can use the 3rd parameter to delay the start time of matched views until the last cascading animation have started. The matched views will animate simultaneously with the cascading views by default.
-
-##### See the ListToGrid & ImageGallery Example for how `cascade` is used.
-
-### ignoreSubviewModifiers Modifier
-
-The `ignoreSubviewModifiers` modifier disables all `heroModifiers` attributes for a view's direct subviews.
-
-### useScaleBasedSizeChange Modifier
-
-Force Hero use scale based size animation. This will convert all `.size` modifier into `.scale` modifier.
-This is to help Hero animate layers that doesn't support bounds animation. Also gives better animation performance.
\ No newline at end of file
diff --git a/docs/InteractiveTransition.md b/docs/InteractiveTransition.md
deleted file mode 100644
index eecdf26f..00000000
--- a/docs/InteractiveTransition.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# Interactive Transition
-
-#### Check out the [Interactive transitions with Hero (Part 1)](http://lkzhao.com/2017/02/05/hero-interactive-transition.html) blog post for a more in-depth tutorial on interactive transition.
-
-
-## General Approach
-
-When implementing a interactive transition, the general approach is to setup a gesture recognizer first. Then do the following 3 things inside the gesture handler:
-
-1. Tell Hero when to start the transition
-
- Usually happens when `gestureRecognizer.state == .began`. Begin the transition as normal.
-
-2. Tell Hero to update the animations through out the transition
-
- Use `Hero.shared.update(progress:)` & `Hero.shared.apply(modifiers:to:)` to modify the progress & view states.
-
-3. Tell Hero to end/cancel the transition
-
- Use `Hero.shared.end()` or `Hero.shared.cancel()`
-
-
-## Interactive methods
-
-`Hero.shared` is the singleton object you can operate with when doing an interactive transition. It has the following 4 methods that are useful for interactive transition:
-
-```swift
-/**
- Update the progress for the interactive transition.
- - Parameters:
- - progress: the current progress, must be between 0...1
- */
-public func update(progress: Double)
-
-/**
- Finish the interactive transition.
- Will stop the interactive transition and animate from the
- current state to the **end** state
- */
-public func end(animate: Bool = true)
-
-/**
- Cancel the interactive transition.
- Will stop the interactive transition and animate from the
- current state to the **beginning** state
- */
-public func cancel(animate: Bool = true)
-
-/**
- Override modifiers during an interactive animation.
-
- For example:
-
- Hero.shared.apply([.position(x:50, y:50)], to:view)
-
- will set the view's position to 50, 50
- - Parameters:
- - modifiers: the modifiers to override
- - view: the view to override to
- */
-public func apply(modifiers: [HeroModifier], to view: UIView)
-```
-
-## Sample Gesture Recognizer Handler
-
-This example is taken from `ImageViewController.swift` inside the example project.
-
-```swift
- func pan() {
- let translation = panGR.translation(in: nil)
- let progress = translation.y / 2 / collectionView!.bounds.height
- switch panGR.state {
- case .began:
- Hero.shared.setDefaultAnimationForNextTransition(.fade)
- hero_dismissViewController()
- case .changed:
- Hero.shared.update(progress: Double(progress))
- if let cell = collectionView?.visibleCells[0] as? ScrollingImageCell {
- let currentPos = CGPoint(x: translation.x + view.center.x, y: translation.y + view.center.y)
- Hero.shared.apply(modifiers: [.position(currentPos)], to: cell.imageView)
- }
- default:
- if progress + panGR.velocity(in: nil).y / collectionView!.bounds.height > 0.3 {
- Hero.shared.end()
- } else {
- Hero.shared.cancel()
- }
- }
- }
-```
-
diff --git a/docs/NavigationHelpers.md b/docs/NavigationHelpers.md
deleted file mode 100644
index 92ab70e2..00000000
--- a/docs/NavigationHelpers.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# Navigation Helper
-
-Hero provides some useful navigation extension methods on UIViewController. Use these alongside with `pushViewController`, `presentViewController` to navigate between view controllers.
-
-
-```swift
-func hero_dismissViewController()
-```
-
-Dismiss the current view controller with animation. Will perform a navigationController.popViewController
-if the current view controller is contained inside a navigationController.
-
-```swift
-func hero_replaceViewController(with: UIViewController)
-```
-
-Replace the current view controller with another VC on the navigation/modal stack.
-
-
-```swift
-func hero_unwindToRootViewController()
-```
-
-Unwind to the root view controller using Hero.
-
-
-```swift
-func hero_unwindToViewController(_ toViewController:)
-```
-
-Unwind to a specific view controller using Hero.
-
-
-```swift
-func hero_unwindToViewController(withSelector: Selector)
-```
-
-Unwind to a view controller that responds to the given selector using Hero.
-
-
-```swift
-func hero_unwindToViewController(withClass: AnyClass)
-```
-
-Unwind to a view controller with given class using Hero.
-
-
-```swift
-func hero_unwindToViewController(withMatchBlock: (UIViewController) -> Bool)
-```
-
-Unwind to a view controller that the match block returns true on.
\ No newline at end of file
diff --git a/docs/Protocols.html b/docs/Protocols.html
new file mode 100644
index 00000000..3cf58fc9
--- /dev/null
+++ b/docs/Protocols.html
@@ -0,0 +1,531 @@
+
+
+
+ Protocols Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Protocols Reference
+
+
+
+
+
+
+
+
+
+
+
Protocols
+
The following protocols are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroCompatible
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Allows a view to create their own custom snapshot when using Optimized snapshot
+
+
See more
+
+
+
Declaration
+
+
Swift
+
public protocol HeroCustomSnapshotView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroPreprocessor : AnyObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroAnimator : AnyObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroProgressUpdateObserver : AnyObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+public protocol HeroViewControllerDelegate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroStringConvertible
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroTransitionDelegate : AnyObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Protocols/HeroAnimator.html b/docs/Protocols/HeroAnimator.html
new file mode 100644
index 00000000..a432928f
--- /dev/null
+++ b/docs/Protocols/HeroAnimator.html
@@ -0,0 +1,508 @@
+
+
+
+ HeroAnimator Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroAnimator Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroAnimator
+
+
+
public protocol HeroAnimator : AnyObject
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func canAnimate ( view : UIView , appearing : Bool ) -> Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func animate ( fromViews : [ UIView ], toViews : [ UIView ]) -> TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func clean ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func seekTo ( timePassed : TimeInterval )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func resume ( timePassed : TimeInterval , reverse : Bool ) -> TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func changeTarget ( state : HeroTargetState , isDestination : Bool , to view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Protocols/HeroCompatible.html b/docs/Protocols/HeroCompatible.html
new file mode 100644
index 00000000..b66efbcb
--- /dev/null
+++ b/docs/Protocols/HeroCompatible.html
@@ -0,0 +1,336 @@
+
+
+
+ HeroCompatible Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroCompatible Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroCompatible
+
+
+
public protocol HeroCompatible
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
associatedtype CompatibleType
+
+
+
+
+
+
+
+
+
+
+
+
+ hero
+
+
+ Default implementation
+
+
+
+
+
+
+
+ Default Implementation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Protocols/HeroCustomSnapshotView.html b/docs/Protocols/HeroCustomSnapshotView.html
new file mode 100644
index 00000000..13438a61
--- /dev/null
+++ b/docs/Protocols/HeroCustomSnapshotView.html
@@ -0,0 +1,298 @@
+
+
+
+ HeroCustomSnapshotView Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroCustomSnapshotView Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroCustomSnapshotView
+
+
+
public protocol HeroCustomSnapshotView
+
+
+
+
Allows a view to create their own custom snapshot when using Optimized snapshot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
var heroSnapshot : UIView ? { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Protocols/HeroPreprocessor.html b/docs/Protocols/HeroPreprocessor.html
new file mode 100644
index 00000000..05ac19c9
--- /dev/null
+++ b/docs/Protocols/HeroPreprocessor.html
@@ -0,0 +1,328 @@
+
+
+
+ HeroPreprocessor Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroPreprocessor Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroPreprocessor
+
+
+
public protocol HeroPreprocessor : AnyObject
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func process ( fromViews : [ UIView ], toViews : [ UIView ])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Protocols/HeroProgressUpdateObserver.html b/docs/Protocols/HeroProgressUpdateObserver.html
new file mode 100644
index 00000000..a60b00ad
--- /dev/null
+++ b/docs/Protocols/HeroProgressUpdateObserver.html
@@ -0,0 +1,298 @@
+
+
+
+ HeroProgressUpdateObserver Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroProgressUpdateObserver Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroProgressUpdateObserver
+
+
+
public protocol HeroProgressUpdateObserver : AnyObject
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func heroDidUpdateProgress ( progress : Double )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Protocols/HeroStringConvertible.html b/docs/Protocols/HeroStringConvertible.html
new file mode 100644
index 00000000..e07f639f
--- /dev/null
+++ b/docs/Protocols/HeroStringConvertible.html
@@ -0,0 +1,298 @@
+
+
+
+ HeroStringConvertible Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroStringConvertible Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroStringConvertible
+
+
+
public protocol HeroStringConvertible
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
static func from ( node : ExprNode ) -> ` Self `?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Protocols/HeroTransitionDelegate.html b/docs/Protocols/HeroTransitionDelegate.html
new file mode 100644
index 00000000..8b8cafc9
--- /dev/null
+++ b/docs/Protocols/HeroTransitionDelegate.html
@@ -0,0 +1,328 @@
+
+
+
+ HeroTransitionDelegate Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroTransitionDelegate Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroTransitionDelegate
+
+
+
public protocol HeroTransitionDelegate : AnyObject
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func heroTransition ( _ hero : HeroTransition , didUpdate progress : Double )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Protocols/HeroViewControllerDelegate.html b/docs/Protocols/HeroViewControllerDelegate.html
new file mode 100644
index 00000000..29cfaf1d
--- /dev/null
+++ b/docs/Protocols/HeroViewControllerDelegate.html
@@ -0,0 +1,548 @@
+
+
+
+ HeroViewControllerDelegate Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroViewControllerDelegate Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroViewControllerDelegate
+
+
+
@objc
+public protocol HeroViewControllerDelegate
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroWillStartAnimatingFrom ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidEndAnimatingFrom ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidCancelAnimatingFrom ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroWillStartTransition ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidEndTransition ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidCancelTransition ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroWillStartAnimatingTo ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidEndAnimatingTo ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidCancelAnimatingTo ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/README.md b/docs/README.md
deleted file mode 100644
index 102095ac..00000000
--- a/docs/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Table of Contents
-
-* [Read Me](/README.md)
-* [Installation](/docs/Installation.md)
-* [Usage Guide](/docs/UsageGuide.md)
-
-#
-
-* Core Concepts
- * [Hero Modifier](/docs/HeroModifiers.md)
- * [Coordinate Space](/docs/CoordinateSpace.md)
- * [View Snapshot](/docs/SnapshotTypes.md)
-
-#
-
-* [Interactive Transition](/docs/InteractiveTransition.md)
-* [Default Animations](/docs/DefaultAnimations.md)
-* [Navigation Helpers](/docs/NavigationHelpers.md)
\ No newline at end of file
diff --git a/docs/SnapshotTypes.md b/docs/SnapshotTypes.md
deleted file mode 100644
index c1cbea4a..00000000
--- a/docs/SnapshotTypes.md
+++ /dev/null
@@ -1,22 +0,0 @@
-Hero creates snapshots of your animating views when performing animations. Use the following four modifiers to change how Hero take these snapshots.
-
-#### useOptimizedSnapshot
-
- With this modifier, Hero will create snapshot optimized for different view type when animating.
- For custom views or views with masking, useOptimizedSnapshot might create snapshots
- that appear differently than the actual view.
- In that case, use .useNormalSnapshot or .useSlowRenderSnapshot to disable the optimization.
-
-#### useNormalSnapshot
-
- Create snapshot using snapshotView(afterScreenUpdates:).
-
-#### useLayerRenderSnapshot
-
- Create snapshot using layer.render(in: currentContext).
- This is slower than .useNormalSnapshot but gives more accurate snapshot for some views (eg. UIStackView).
-
-#### useNoSnapshot
-
- Force Hero to not create any snapshot when animating this view. Hence Hero will animate on the view directly.
- This will mess up the view hierarchy. Therefore, view controllers have to rebuild its view structure after the transition finishes.
diff --git a/docs/Structs.html b/docs/Structs.html
new file mode 100644
index 00000000..05a612f4
--- /dev/null
+++ b/docs/Structs.html
@@ -0,0 +1,328 @@
+
+
+
+ Structures Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Structures Reference
+
+
+
+
+
+
+
+
+
+
+
Structures
+
The following structures are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public struct HeroTargetState
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public struct HeroConditionalContext
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Structs/HeroConditionalContext.html b/docs/Structs/HeroConditionalContext.html
new file mode 100644
index 00000000..fd2c797c
--- /dev/null
+++ b/docs/Structs/HeroConditionalContext.html
@@ -0,0 +1,658 @@
+
+
+
+ HeroConditionalContext Structure Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroConditionalContext Structure Reference
+
+
+
+
+
+
+
+
+
+
+
HeroConditionalContext
+
+
+
public struct HeroConditionalContext
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public weak var view : UIView !
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public private(set) var isAppearing : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isPresenting : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isInTabbarController : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isInNavbarController : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isMatched : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isAncestorViewMatched : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var matchedView : UIView ? { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var matchedAncestorView : ( UIView , UIView )? { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var fromViewController : UIViewController { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var toViewController : UIViewController { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var currentViewController : UIViewController { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var otherViewController : UIViewController { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Structs/HeroTargetState.html b/docs/Structs/HeroTargetState.html
new file mode 100644
index 00000000..31ba2130
--- /dev/null
+++ b/docs/Structs/HeroTargetState.html
@@ -0,0 +1,1444 @@
+
+
+
+ HeroTargetState Structure Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroTargetState Structure Reference
+
+
+
+
+
+
+
+
+
+
+
HeroTargetState
+
+
+
public struct HeroTargetState
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var position : CGPoint ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var size : CGSize ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var transform : CATransform3D ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var opacity : Float ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var cornerRadius : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var backgroundColor : CGColor ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var zPosition : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var contentsRect : CGRect ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var contentsScale : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var borderWidth : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var borderColor : CGColor ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var shadowColor : CGColor ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var shadowOpacity : Float ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var shadowOffset : CGSize ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var shadowRadius : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var shadowPath : CGPath ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var masksToBounds : Bool ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var displayShadow : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var overlay : ( color : CGColor , opacity : CGFloat )?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var spring : ( CGFloat , CGFloat )?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var delay : TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var duration : TimeInterval ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var timingFunction : CAMediaTimingFunction ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var arc : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var source : String ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var ignoreSubviewModifiers : Bool ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var useScaleBasedSizeChange : Bool ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var nonFade : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var forceAnimate : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var custom : [ String : Any ]?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public mutating func append ( _ modifier : HeroModifier )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public mutating func append ( contentsOf modifiers : [ HeroModifier ])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public subscript ( key : String ) -> Any ? { get set }
+
+
+
+
+
Return Value
+
custom item for a specific key
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( arrayLiteral elements : HeroModifier ... )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/UsageGuide.md b/docs/UsageGuide.md
deleted file mode 100644
index 6d942b93..00000000
--- a/docs/UsageGuide.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# Usage
-
-### Storyboard
-
-1. In the Identity Inspector, for every pair of source/destination views, give each one the same `HeroID` attribute.
-3. For any other views that you would like to animate, specify animation effects in the `Hero Modifier String` attribute.
-4. Also in the Identity Inspector, enable Hero Transition on your destination view controller.
-
-### In Code
-
-1. Before doing a transition, set the desired `heroID` and `heroModifiers` to both your source and destination views.
-2. Enable Hero for the destination view controller
-
- ```swift
- viewController.isHeroEnabled = true
- ```
-
-### UINavigationController & UITabBarController
-
-Hero also supports transitions within a navigation controller or a tab bar controller—just set the 'isHeroEnabled' attribute to true on the UINavigationController/UITabBarController instance.
-
-## Attributes
-There are two important attributes to understand: `heroID` and `heroModifiers`. These are implemented as extensions (using associated objects) for `UIView`. Therefore, after the Hero library is imported, every `UIView` will have these two attributes.
-
-| Attribute Name | Description |
-| --- | --- |
-| `heroID` | Identifier for the view. Hero will automatically transition between views with the same `heroID` |
-| `heroModifiers` | Specifies the extra animations performed alongside the main transition. |
-
-## HeroID
-
-`heroID` is the identifier for the view. When doing a transition between two view controllers, Hero will search through all subviews for both controllers, and match any views with the same `heroID`. Whenever a pair is discovered, Hero will automatically transit the views from source state to destination state.
-
-## HeroModifiers
-
-Use `heroModifiers` to specify animations alongside the main transition. Checkout [HeroModifier.swift](https://github.com/lkzhao/Hero/blob/master/Sources/HeroModifier.swift) for available modifiers.
-
-#### For example, to achieve the following effect, set the `heroModifiers` to be
-
-```swift
-view.heroModifiers = [.fade, .translate(x:0, y:-250), .rotate(x:-1.6), .scale(1.5)]
-```
-
-
-
-Note: For matched views, the target view's heroModifier will be used. The source view's heroModifier will be ignored. When dismissing, the target view is the presentingViewController's view and the source view is the presentedViewController's view.
-
-## HeroModifierString
-
-This is a string value. It provides another way to set `heroModifiers`. It can be accessed through the storyboard.
-
-It must be in the following syntax:
-
-```swift
-modifier1() modifier2(parameter1) modifier3(parameter1, parameter2) ...
-```
-
-Parameters must be between a pair of parentheses, separated by a comma, and each modifier must be separated by a space. Not all modifiers are settable this way.
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 00000000..18854876
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-midnight
\ No newline at end of file
diff --git a/docs/badge.svg b/docs/badge.svg
new file mode 100644
index 00000000..579932f7
--- /dev/null
+++ b/docs/badge.svg
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ documentation
+
+
+ documentation
+
+
+ 24%
+
+
+ 24%
+
+
+
diff --git a/docs/css/highlight.css b/docs/css/highlight.css
new file mode 100644
index 00000000..d0db0e13
--- /dev/null
+++ b/docs/css/highlight.css
@@ -0,0 +1,200 @@
+/* Credit to https://gist.github.com/wataru420/2048287 */
+.highlight {
+ /* Comment */
+ /* Error */
+ /* Keyword */
+ /* Operator */
+ /* Comment.Multiline */
+ /* Comment.Preproc */
+ /* Comment.Single */
+ /* Comment.Special */
+ /* Generic.Deleted */
+ /* Generic.Deleted.Specific */
+ /* Generic.Emph */
+ /* Generic.Error */
+ /* Generic.Heading */
+ /* Generic.Inserted */
+ /* Generic.Inserted.Specific */
+ /* Generic.Output */
+ /* Generic.Prompt */
+ /* Generic.Strong */
+ /* Generic.Subheading */
+ /* Generic.Traceback */
+ /* Keyword.Constant */
+ /* Keyword.Declaration */
+ /* Keyword.Pseudo */
+ /* Keyword.Reserved */
+ /* Keyword.Type */
+ /* Literal.Number */
+ /* Literal.String */
+ /* Name.Attribute */
+ /* Name.Builtin */
+ /* Name.Class */
+ /* Name.Constant */
+ /* Name.Entity */
+ /* Name.Exception */
+ /* Name.Function */
+ /* Name.Namespace */
+ /* Name.Tag */
+ /* Name.Variable */
+ /* Operator.Word */
+ /* Text.Whitespace */
+ /* Literal.Number.Float */
+ /* Literal.Number.Hex */
+ /* Literal.Number.Integer */
+ /* Literal.Number.Oct */
+ /* Literal.String.Backtick */
+ /* Literal.String.Char */
+ /* Literal.String.Doc */
+ /* Literal.String.Double */
+ /* Literal.String.Escape */
+ /* Literal.String.Heredoc */
+ /* Literal.String.Interpol */
+ /* Literal.String.Other */
+ /* Literal.String.Regex */
+ /* Literal.String.Single */
+ /* Literal.String.Symbol */
+ /* Name.Builtin.Pseudo */
+ /* Name.Variable.Class */
+ /* Name.Variable.Global */
+ /* Name.Variable.Instance */
+ /* Literal.Number.Integer.Long */ }
+ .highlight .c {
+ color: #999988;
+ font-style: italic; }
+ .highlight .err {
+ color: #a61717;
+ background-color: #e3d2d2; }
+ .highlight .k {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .o {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .cm {
+ color: #999988;
+ font-style: italic; }
+ .highlight .cp {
+ color: #999999;
+ font-weight: bold; }
+ .highlight .c1 {
+ color: #999988;
+ font-style: italic; }
+ .highlight .cs {
+ color: #999999;
+ font-weight: bold;
+ font-style: italic; }
+ .highlight .gd {
+ color: #000000;
+ background-color: #ffdddd; }
+ .highlight .gd .x {
+ color: #000000;
+ background-color: #ffaaaa; }
+ .highlight .ge {
+ color: #000000;
+ font-style: italic; }
+ .highlight .gr {
+ color: #aa0000; }
+ .highlight .gh {
+ color: #999999; }
+ .highlight .gi {
+ color: #000000;
+ background-color: #ddffdd; }
+ .highlight .gi .x {
+ color: #000000;
+ background-color: #aaffaa; }
+ .highlight .go {
+ color: #888888; }
+ .highlight .gp {
+ color: #555555; }
+ .highlight .gs {
+ font-weight: bold; }
+ .highlight .gu {
+ color: #aaaaaa; }
+ .highlight .gt {
+ color: #aa0000; }
+ .highlight .kc {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .kd {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .kp {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .kr {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .kt {
+ color: #445588; }
+ .highlight .m {
+ color: #009999; }
+ .highlight .s {
+ color: #d14; }
+ .highlight .na {
+ color: #008080; }
+ .highlight .nb {
+ color: #0086B3; }
+ .highlight .nc {
+ color: #445588;
+ font-weight: bold; }
+ .highlight .no {
+ color: #008080; }
+ .highlight .ni {
+ color: #800080; }
+ .highlight .ne {
+ color: #990000;
+ font-weight: bold; }
+ .highlight .nf {
+ color: #990000; }
+ .highlight .nn {
+ color: #555555; }
+ .highlight .nt {
+ color: #000080; }
+ .highlight .nv {
+ color: #008080; }
+ .highlight .ow {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .w {
+ color: #bbbbbb; }
+ .highlight .mf {
+ color: #009999; }
+ .highlight .mh {
+ color: #009999; }
+ .highlight .mi {
+ color: #009999; }
+ .highlight .mo {
+ color: #009999; }
+ .highlight .sb {
+ color: #d14; }
+ .highlight .sc {
+ color: #d14; }
+ .highlight .sd {
+ color: #d14; }
+ .highlight .s2 {
+ color: #d14; }
+ .highlight .se {
+ color: #d14; }
+ .highlight .sh {
+ color: #d14; }
+ .highlight .si {
+ color: #d14; }
+ .highlight .sx {
+ color: #d14; }
+ .highlight .sr {
+ color: #009926; }
+ .highlight .s1 {
+ color: #d14; }
+ .highlight .ss {
+ color: #990073; }
+ .highlight .bp {
+ color: #999999; }
+ .highlight .vc {
+ color: #008080; }
+ .highlight .vg {
+ color: #008080; }
+ .highlight .vi {
+ color: #008080; }
+ .highlight .il {
+ color: #009999; }
diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css
new file mode 100644
index 00000000..833be0d2
--- /dev/null
+++ b/docs/css/jazzy.css
@@ -0,0 +1,378 @@
+*, *:before, *:after {
+ box-sizing: inherit; }
+
+body {
+ margin: 0;
+ background: #fff;
+ color: #333;
+ font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
+ letter-spacing: .2px;
+ -webkit-font-smoothing: antialiased;
+ box-sizing: border-box; }
+
+h1 {
+ font-size: 2rem;
+ font-weight: 700;
+ margin: 1.275em 0 0.6em; }
+
+h2 {
+ font-size: 1.75rem;
+ font-weight: 700;
+ margin: 1.275em 0 0.3em; }
+
+h3 {
+ font-size: 1.5rem;
+ font-weight: 700;
+ margin: 1em 0 0.3em; }
+
+h4 {
+ font-size: 1.25rem;
+ font-weight: 700;
+ margin: 1.275em 0 0.85em; }
+
+h5 {
+ font-size: 1rem;
+ font-weight: 700;
+ margin: 1.275em 0 0.85em; }
+
+h6 {
+ font-size: 1rem;
+ font-weight: 700;
+ margin: 1.275em 0 0.85em;
+ color: #777; }
+
+p {
+ margin: 0 0 1em; }
+
+ul, ol {
+ padding: 0 0 0 2em;
+ margin: 0 0 0.85em; }
+
+blockquote {
+ margin: 0 0 0.85em;
+ padding: 0 15px;
+ color: #858585;
+ border-left: 4px solid #e5e5e5; }
+
+img {
+ max-width: 100%; }
+
+a {
+ color: #4183c4;
+ text-decoration: none; }
+ a:hover, a:focus {
+ outline: 0;
+ text-decoration: underline; }
+ a.discouraged {
+ text-decoration: line-through; }
+ a.discouraged:hover, a.discouraged:focus {
+ text-decoration: underline line-through; }
+
+table {
+ background: #fff;
+ width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+ overflow: auto;
+ margin: 0 0 0.85em; }
+
+tr:nth-child(2n) {
+ background-color: #fbfbfb; }
+
+th, td {
+ padding: 6px 13px;
+ border: 1px solid #ddd; }
+
+pre {
+ margin: 0 0 1.275em;
+ padding: .85em 1em;
+ overflow: auto;
+ background: #f7f7f7;
+ font-size: .85em;
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; }
+
+code {
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; }
+
+p > code, li > code {
+ background: #f7f7f7;
+ padding: .2em; }
+ p > code:before, p > code:after, li > code:before, li > code:after {
+ letter-spacing: -.2em;
+ content: "\00a0"; }
+
+pre code {
+ padding: 0;
+ white-space: pre; }
+
+.content-wrapper {
+ display: flex;
+ flex-direction: column; }
+ @media (min-width: 768px) {
+ .content-wrapper {
+ flex-direction: row; } }
+
+.header {
+ display: flex;
+ padding: 8px;
+ font-size: 0.875em;
+ background: #444;
+ color: #999; }
+
+.header-col {
+ margin: 0;
+ padding: 0 8px; }
+
+.header-col--primary {
+ flex: 1; }
+
+.header-link {
+ color: #fff; }
+
+.header-icon {
+ padding-right: 6px;
+ vertical-align: -4px;
+ height: 16px; }
+
+.breadcrumbs {
+ font-size: 0.875em;
+ padding: 8px 16px;
+ margin: 0;
+ background: #fbfbfb;
+ border-bottom: 1px solid #ddd; }
+
+.carat {
+ height: 10px;
+ margin: 0 5px; }
+
+.navigation {
+ order: 2; }
+ @media (min-width: 768px) {
+ .navigation {
+ order: 1;
+ width: 25%;
+ max-width: 300px;
+ padding-bottom: 64px;
+ overflow: hidden;
+ word-wrap: normal;
+ background: #fbfbfb;
+ border-right: 1px solid #ddd; } }
+
+.nav-groups {
+ list-style-type: none;
+ padding-left: 0; }
+
+.nav-group-name {
+ border-bottom: 1px solid #ddd;
+ padding: 8px 0 8px 16px; }
+
+.nav-group-name-link {
+ color: #333; }
+
+.nav-group-tasks {
+ margin: 8px 0;
+ padding: 0 0 0 8px; }
+
+.nav-group-task {
+ font-size: 1em;
+ list-style-type: none;
+ white-space: nowrap; }
+
+.nav-group-task-link {
+ color: #808080; }
+
+.main-content {
+ order: 1; }
+ @media (min-width: 768px) {
+ .main-content {
+ order: 2;
+ flex: 1;
+ padding-bottom: 60px; } }
+
+.section {
+ padding: 0 32px;
+ border-bottom: 1px solid #ddd; }
+
+.section-content {
+ max-width: 834px;
+ margin: 0 auto;
+ padding: 16px 0; }
+
+.section-name {
+ color: #666;
+ display: block; }
+
+.declaration .highlight {
+ overflow-x: initial;
+ padding: 8px 0;
+ margin: 0;
+ background-color: transparent;
+ border: none; }
+
+.task-group-section {
+ border-top: 1px solid #ddd; }
+
+.task-group {
+ padding-top: 0px; }
+
+.task-name-container a[name]:before {
+ content: "";
+ display: block; }
+
+.item-container {
+ padding: 0; }
+
+.item {
+ padding-top: 8px;
+ width: 100%;
+ list-style-type: none; }
+ .item a[name]:before {
+ content: "";
+ display: block; }
+ .item .token, .item .direct-link {
+ padding-left: 3px;
+ margin-left: 0px;
+ font-size: 1rem; }
+ .item .declaration-note {
+ font-size: .85em;
+ color: #808080;
+ font-style: italic; }
+
+.pointer-container {
+ border-bottom: 1px solid #ddd;
+ left: -23px;
+ padding-bottom: 13px;
+ position: relative;
+ width: 110%; }
+
+.pointer {
+ left: 21px;
+ top: 7px;
+ display: block;
+ position: absolute;
+ width: 12px;
+ height: 12px;
+ border-left: 1px solid #ddd;
+ border-top: 1px solid #ddd;
+ background: #fff;
+ transform: rotate(45deg); }
+
+.height-container {
+ display: none;
+ position: relative;
+ width: 100%;
+ overflow: hidden; }
+ .height-container .section {
+ background: #fff;
+ border: 1px solid #ddd;
+ border-top-width: 0;
+ padding-top: 10px;
+ padding-bottom: 5px;
+ padding: 8px 16px; }
+
+.aside, .language {
+ padding: 6px 12px;
+ margin: 12px 0;
+ border-left: 5px solid #dddddd;
+ overflow-y: hidden; }
+ .aside .aside-title, .language .aside-title {
+ font-size: 9px;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+ padding-bottom: 0;
+ margin: 0;
+ color: #aaa;
+ -webkit-user-select: none; }
+ .aside p:last-child, .language p:last-child {
+ margin-bottom: 0; }
+
+.language {
+ border-left: 5px solid #cde9f4; }
+ .language .aside-title {
+ color: #4183c4; }
+
+.aside-warning, .aside-deprecated, .aside-unavailable {
+ border-left: 5px solid #ff6666; }
+ .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title {
+ color: #ff0000; }
+
+.graybox {
+ border-collapse: collapse;
+ width: 100%; }
+ .graybox p {
+ margin: 0;
+ word-break: break-word;
+ min-width: 50px; }
+ .graybox td {
+ border: 1px solid #ddd;
+ padding: 5px 25px 5px 10px;
+ vertical-align: middle; }
+ .graybox tr td:first-of-type {
+ text-align: right;
+ padding: 7px;
+ vertical-align: top;
+ word-break: normal;
+ width: 40px; }
+
+.slightly-smaller {
+ font-size: 0.9em; }
+
+.footer {
+ padding: 8px 16px;
+ background: #444;
+ color: #ddd;
+ font-size: 0.8em; }
+ .footer p {
+ margin: 8px 0; }
+ .footer a {
+ color: #fff; }
+
+html.dash .header, html.dash .breadcrumbs, html.dash .navigation {
+ display: none; }
+
+html.dash .height-container {
+ display: block; }
+
+form[role=search] input {
+ font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 24px;
+ padding: 0 10px;
+ margin: 0;
+ border: none;
+ border-radius: 1em; }
+ .loading form[role=search] input {
+ background: white url(../img/spinner.gif) center right 4px no-repeat; }
+
+form[role=search] .tt-menu {
+ margin: 0;
+ min-width: 300px;
+ background: #fbfbfb;
+ color: #333;
+ border: 1px solid #ddd; }
+
+form[role=search] .tt-highlight {
+ font-weight: bold; }
+
+form[role=search] .tt-suggestion {
+ font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
+ padding: 0 8px; }
+ form[role=search] .tt-suggestion span {
+ display: table-cell;
+ white-space: nowrap; }
+ form[role=search] .tt-suggestion .doc-parent-name {
+ width: 100%;
+ text-align: right;
+ font-weight: normal;
+ font-size: 0.9em;
+ padding-left: 16px; }
+
+form[role=search] .tt-suggestion:hover,
+form[role=search] .tt-suggestion.tt-cursor {
+ cursor: pointer;
+ background-color: #4183c4;
+ color: #fff; }
+
+form[role=search] .tt-suggestion:hover .doc-parent-name,
+form[role=search] .tt-suggestion.tt-cursor .doc-parent-name {
+ color: #fff; }
diff --git a/docs/docsets/Hero.docset/Contents/Info.plist b/docs/docsets/Hero.docset/Contents/Info.plist
new file mode 100644
index 00000000..a7ed4135
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Info.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ CFBundleIdentifier
+ com.jazzy.hero
+ CFBundleName
+ Hero
+ DocSetPlatformFamily
+ hero
+ isDashDocset
+
+ dashIndexFilePath
+ index.html
+ isJavaScriptEnabled
+
+ DashDocSetFamily
+ dashtoc
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes.html
new file mode 100644
index 00000000..39344cc0
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes.html
@@ -0,0 +1,821 @@
+
+
+
+ Classes Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Classes Reference
+
+
+
+
+
+
+
+
+
+
+
Classes
+
The following classes are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class HeroDebugPlugin : HeroPlugin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class HeroExtension < Base >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class HeroContext
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public final class HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class Lexer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class ExprNode : CustomStringConvertible , Equatable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class NumberNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class VariableNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class BinaryOpNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class CallNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class PrototypeNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class FunctionNode : ExprNode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public class Parser
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open class HeroTransition : NSObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The singleton class/object for controlling interactive transitions.
+
Hero . shared
+
+
Use the following methods for controlling the interactive transition:
+
func update ( progress : Double )
+func end ()
+func cancel ()
+func apply ( modifiers :[ HeroModifier ], to view : UIView )
+
+
+
See more
+
+
+
Declaration
+
+
Swift
+
public class Hero : NSObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/BinaryOpNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/BinaryOpNode.html
new file mode 100644
index 00000000..3a440f25
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/BinaryOpNode.html
@@ -0,0 +1,388 @@
+
+
+
+ BinaryOpNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ BinaryOpNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
BinaryOpNode
+
+
+
public class BinaryOpNode : ExprNode
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/CallNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/CallNode.html
new file mode 100644
index 00000000..e9afa8ea
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/CallNode.html
@@ -0,0 +1,358 @@
+
+
+
+ CallNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ CallNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
CallNode
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public let arguments : [ ExprNode ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( name : String , arguments : [ ExprNode ])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/ExprNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/ExprNode.html
new file mode 100644
index 00000000..a91c1514
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/ExprNode.html
@@ -0,0 +1,387 @@
+
+
+
+ ExprNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ ExprNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
ExprNode
+
+
+
public class ExprNode : CustomStringConvertible , Equatable
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var range : CountableRange < Int >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public let name : String
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( name : String )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/FunctionNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/FunctionNode.html
new file mode 100644
index 00000000..c8350ea1
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/FunctionNode.html
@@ -0,0 +1,388 @@
+
+
+
+ FunctionNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ FunctionNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
FunctionNode
+
+
+
public class FunctionNode : ExprNode
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Hero.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Hero.html
new file mode 100644
index 00000000..e3a4a05b
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Hero.html
@@ -0,0 +1,306 @@
+
+
+
+ Hero Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Hero Class Reference
+
+
+
+
+
+
+
+
+
+
+
Hero
+
+
+
public class Hero : NSObject
+
+
+
+
The singleton class/object for controlling interactive transitions.
+
Hero . shared
+
+
Use the following methods for controlling the interactive transition:
+
func update ( progress : Double )
+func end ()
+func cancel ()
+func apply ( modifiers :[ HeroModifier ], to view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Shared singleton object for controlling the transition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroContext.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroContext.html
new file mode 100644
index 00000000..a7482f4c
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroContext.html
@@ -0,0 +1,618 @@
+
+
+
+ HeroContext Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroContext Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroContext
+
+
+
public class HeroContext
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The container holding all of the animating views
+
+
+
+
Declaration
+
+
Swift
+
public let container : UIView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A flattened list of all views from source ViewController
+
+
+
+
Declaration
+
+
Swift
+
public var fromViews : [ UIView ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
A flattened list of all views from destination ViewController
+
+
+
+
Declaration
+
+
Swift
+
public var toViews : [ UIView ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func sourceView ( for heroID : String ) -> UIView ?
+
+
+
+
+
Return Value
+
a source view matching the heroID, nil if not found
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func destinationView ( for heroID : String ) -> UIView ?
+
+
+
+
+
Return Value
+
a destination view matching the heroID, nil if not found
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func pairedView ( for view : UIView ) -> UIView ?
+
+
+
+
+
Return Value
+
a view with the same heroID, but on different view controller, nil if not found
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func snapshotView ( for view : UIView ) -> UIView
+
+
+
+
+
Return Value
+
a snapshot view for animation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public subscript ( view : UIView ) -> HeroTargetState ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func clean ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hide ( view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func unhide ( view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroDebugPlugin.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroDebugPlugin.html
new file mode 100644
index 00000000..cb8e7adc
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroDebugPlugin.html
@@ -0,0 +1,373 @@
+
+
+
+ HeroDebugPlugin Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroDebugPlugin Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroDebugPlugin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroExtension.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroExtension.html
new file mode 100644
index 00000000..3ba263ea
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroExtension.html
@@ -0,0 +1,895 @@
+
+
+
+ HeroExtension Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroExtension Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroExtension
+
+
+
public class HeroExtension < Base >
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public let base : Base
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ID is the identifier for the view. When doing a transition between two view controllers,
+Hero will search through all the subviews for both view controllers and matches views with the same heroID .
+
+
Whenever a pair is discovered,
+Hero will automatically transit the views from source state to the destination state.
+
+
+
+
Declaration
+
+
Swift
+
public var id : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
isEnabled allows to specify whether a view and its subviews should be consider for animations.
+If true, Hero will search through all the subviews for heroIds and modifiers. Defaults to true
+
+
+
+
Declaration
+
+
Swift
+
public var isEnabled : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
isEnabledForSubviews allows to specify whether a view’s subviews should be consider for animations.
+If true, Hero will search through all the subviews for heroIds and modifiers. Defaults to true
+
+
+
+
Declaration
+
+
Swift
+
public var isEnabledForSubviews : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Use modifiers to specify animations alongside the main transition. Checkout HeroModifier.swift
for available modifiers.
+
+
+
+
Declaration
+
+
Swift
+
public var modifiers : [ HeroModifier ]? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
modifierString** provides another way to set modifiers . It can be assigned through storyboard.
+
+
+
+
Declaration
+
+
Swift
+
public var modifierString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
default hero animation type for presenting & dismissing modally
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var modalAnimationTypeString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isEnabled : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
default hero animation type for push and pop within the navigation controller
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var navigationAnimationTypeString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
default hero animation type for switching tabs within the tab bar controller
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var tabBarAnimationTypeString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Dismiss the current view controller with animation. Will perform a navigationController.popViewController
+if the current view controller is contained inside a navigationController
+
+
+
+
Declaration
+
+
Swift
+
public func dismissViewController ( completion : (() -> Void )? = nil )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Unwind to the root view controller using Hero
+
+
+
+
Declaration
+
+
Swift
+
public func unwindToRootViewController ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Unwind to a specific view controller using Hero
+
+
+
+
Declaration
+
+
Swift
+
public func unwindToViewController ( _ toViewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func unwindToViewController ( withSelector : Selector )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Unwind to a view controller with given class using Hero
+
+
+
+
Declaration
+
+
Swift
+
public func unwindToViewController ( withClass : AnyClass )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Unwind to a view controller that the matchBlock returns true on.
+
+
+
+
Declaration
+
+
Swift
+
public func unwindToViewController ( withMatchBlock : ( UIViewController ) -> Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Replace the current view controller with another VC on the navigation/modal stack.
+
+
+
+
Declaration
+
+
Swift
+
public func replaceViewController ( with next : UIViewController , completion : (() -> Void )? = nil )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroModifier.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroModifier.html
new file mode 100644
index 00000000..6280f738
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroModifier.html
@@ -0,0 +1,2650 @@
+
+
+
+ HeroModifier Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroModifier Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroModifier
+
+
+
public final class HeroModifier
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( applyFunction : @escaping ( inout HeroTargetState ) -> Void )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Apply modifiers directly to the view at the start of the transition.
+The modifiers supplied here won’t be animated.
+For source views, modifiers are set directly at the beginning of the animation.
+For destination views, they replace the target state (final appearance).
+
+
+
+
Declaration
+
+
Swift
+
public static func beginWith ( _ modifiers : [ HeroModifier ]) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func beginWith ( modifiers : [ HeroModifier ]) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func beginWith ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Use global coordinate space.
+
+
When using global coordinate space. The view become a independent view that is not a subview of any view.
+It won’t move when its parent view moves, and won’t be affected by parent view’s attributes.
+
+
When a view is matched, this is automatically enabled.
+The source
modifier will also enable this.
+
+
Global coordinate space is default for all views prior to version 0.1.3
+
+
+
+
Declaration
+
+
Swift
+
public static var useGlobalCoordinateSpace : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ignore all heroModifiers attributes for a view’s direct subviews.
+
+
+
+
Declaration
+
+
Swift
+
public static var ignoreSubviewModifiers : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ignore all heroModifiers attributes for a view’s subviews.
+
+
+recursive: if false, will only ignore direct subviews’ modifiers. default false.
+
+
+
+
+
Declaration
+
+
Swift
+
public static func ignoreSubviewModifiers ( recursive : Bool = false ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Will create snapshot optimized for different view type.
+For custom views or views with masking, useOptimizedSnapshot might create snapshots
+that appear differently than the actual view.
+In that case, use .useNormalSnapshot or .useSlowRenderSnapshot to disable the optimization.
+
+
This modifier actually does nothing by itself since .useOptimizedSnapshot is the default.
+
+
+
+
Declaration
+
+
Swift
+
public static var useOptimizedSnapshot : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Create snapshot using snapshotView(afterScreenUpdates:).
+
+
+
+
Declaration
+
+
Swift
+
public static var useNormalSnapshot : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Create snapshot using layer.render(in: currentContext).
+This is slower than .useNormalSnapshot but gives more accurate snapshot for some views (eg. UIStackView).
+
+
+
+
Declaration
+
+
Swift
+
public static var useLayerRenderSnapshot : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Force Hero to not create any snapshot when animating this view.
+This will mess up the view hierarchy, therefore, view controllers have to rebuild
+its view structure after the transition finishes.
+
+
+
+
Declaration
+
+
Swift
+
public static var useNoSnapshot : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Force the view to animate.
+
+
By default, Hero will not animate if the view is outside the screen bounds or if there is no animatable hero modifier, unless this modifier is used.
+
+
+
+
Declaration
+
+
Swift
+
public static var forceAnimate : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Force Hero use scale based size animation. This will convert all .size modifier into .scale modifier.
+This is to help Hero animate layers that doesn’t support bounds animation. Also gives better performance.
+
+
+
+
Declaration
+
+
Swift
+
public static var useScaleBasedSizeChange : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func from ( node : ExprNode ) -> HeroModifier ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Fade the view during transition
+
+
+
+
Declaration
+
+
Swift
+
public static var fade : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Force don’t fade view during transition
+
+
+
+
Declaration
+
+
Swift
+
public static var forceNonFade : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the position for the view to animate from/to.
+
+
+
+
Declaration
+
+
Swift
+
public static func position ( _ position : CGPoint ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ position
+
+
+
+
+
position for the view to animate from/to
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the size for the view to animate from/to.
+
+
+
+
Declaration
+
+
Swift
+
public static func size ( _ size : CGSize ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ size
+
+
+
+
+
size for the view to animate from/to
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the transform for the view to animate from/to. Will override previous perspective, scale, translate, & rotate modifiers
+
+
+
+
Declaration
+
+
Swift
+
public static func transform ( _ t : CATransform3D ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ t
+
+
+
+
+
the CATransform3D object
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the perspective on the transform. use in combination with the rotate modifier.
+
+
+
+
Declaration
+
+
Swift
+
public static func perspective ( _ perspective : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ perspective
+
+
+
+
+
set the camera distance of the transform
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func scale ( x : CGFloat = 1 , y : CGFloat = 1 , z : CGFloat = 1 ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ x
+
+
+
+
+
scale factor on x axis, default 1
+
+
+
+
+
+
+ y
+
+
+
+
+
scale factor on y axis, default 1
+
+
+
+
+
+
+ z
+
+
+
+
+
scale factor on z axis, default 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Scale in x & y axis
+
+
+
+
Declaration
+
+
Swift
+
public static func scale ( _ xy : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ xy
+
+
+
+
+
scale factor in both x & y axis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func translate ( x : CGFloat = 0 , y : CGFloat = 0 , z : CGFloat = 0 ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ x
+
+
+
+
+
translation distance on x axis in display pixel, default 0
+
+
+
+
+
+
+ y
+
+
+
+
+
translation distance on y axis in display pixel, default 0
+
+
+
+
+
+
+ z
+
+
+
+
+
translation distance on z axis in display pixel, default 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func translate ( _ point : CGPoint , z : CGFloat = 0 ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func rotate ( x : CGFloat = 0 , y : CGFloat = 0 , z : CGFloat = 0 ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ x
+
+
+
+
+
rotation on x axis in radian, default 0
+
+
+
+
+
+
+ y
+
+
+
+
+
rotation on y axis in radian, default 0
+
+
+
+
+
+
+ z
+
+
+
+
+
rotation on z axis in radian, default 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func rotate ( _ point : CGPoint , z : CGFloat = 0 ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func rotate ( _ z : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ z
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the opacity for the view to animate from/to.
+
+
+
+
Declaration
+
+
Swift
+
public static func opacity ( _ opacity : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ opacity
+
+
+
+
+
opacity for the view to animate from/to
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the backgroundColor for the view to animate from/to.
+
+
+backgroundColor: backgroundColor for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func backgroundColor ( _ backgroundColor : UIColor ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the cornerRadius for the view to animate from/to.
+
+
+
+
Declaration
+
+
Swift
+
public static func cornerRadius ( _ cornerRadius : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ cornerRadius
+
+
+
+
+
cornerRadius for the view to animate from/to
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the zPosition for the view to animate from/to.
+
+
+zPosition: zPosition for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func zPosition ( _ zPosition : CGFloat ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the contentsRect for the view to animate from/to.
+
+
+contentsRect: contentsRect for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func contentsRect ( _ contentsRect : CGRect ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the contentsScale for the view to animate from/to.
+
+
+contentsScale: contentsScale for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func contentsScale ( _ contentsScale : CGFloat ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the borderWidth for the view to animate from/to.
+
+
+borderWidth: borderWidth for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func borderWidth ( _ borderWidth : CGFloat ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the borderColor for the view to animate from/to.
+
+
+borderColor: borderColor for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func borderColor ( _ borderColor : UIColor ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the shadowColor for the view to animate from/to.
+
+
+shadowColor: shadowColor for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func shadowColor ( _ shadowColor : UIColor ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the shadowOpacity for the view to animate from/to.
+
+
+shadowOpacity: shadowOpacity for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func shadowOpacity ( _ shadowOpacity : CGFloat ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the shadowOffset for the view to animate from/to.
+
+
+shadowOffset: shadowOffset for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func shadowOffset ( _ shadowOffset : CGSize ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the shadowRadius for the view to animate from/to.
+
+
+shadowRadius: shadowRadius for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func shadowRadius ( _ shadowRadius : CGFloat ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the shadowPath for the view to animate from/to.
+
+
+shadowPath: shadowPath for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func shadowPath ( _ shadowPath : CGPath ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Set the masksToBounds for the view to animate from/to.
+
+
+masksToBounds: masksToBounds for the view to animate from/to
+
+
+
+
+
Declaration
+
+
Swift
+
public static func masksToBounds ( _ masksToBounds : Bool ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Create an overlay on the animating view.
+
+
+
+
Declaration
+
+
Swift
+
public static func overlay ( color : UIColor , opacity : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ color
+
+
+
+
+
+
+
+
+
+ opacity
+
+
+
+
+
opacity of the overlay
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Sets the duration of the animation for a given view. If not used, Hero will use determine the duration based on the distance and size changes.
+
+
Note: a duration of .infinity means matching the duration of the longest animation. same as .durationMatchLongest
+
+
+
+
Declaration
+
+
Swift
+
public static func duration ( _ duration : TimeInterval ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ duration
+
+
+
+
+
duration of the animation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Sets the duration of the animation for a given view to match the longest animation of the transition.
+
+
+
+
Declaration
+
+
Swift
+
public static var durationMatchLongest : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Sets the delay of the animation for a given view.
+
+
+
+
Declaration
+
+
Swift
+
public static func delay ( _ delay : TimeInterval ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ delay
+
+
+
+
+
delay of the animation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Sets the timing function of the animation for a given view. If not used, Hero will use determine the timing function based on whether or not the view is entering or exiting the screen.
+
+
+
+
Declaration
+
+
Swift
+
public static func timingFunction ( _ timingFunction : CAMediaTimingFunction ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ timingFunction
+
+
+
+
+
timing function of the animation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
(iOS 9+) Use spring animation with custom stiffness & damping. The duration will be automatically calculated. Will be ignored if arc, timingFunction, or duration is set.
+
+
+
+
Declaration
+
+
Swift
+
@available ( iOS 9 , * )
+public static func spring ( stiffness : CGFloat , damping : CGFloat ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ stiffness
+
+
+
+
+
stiffness of the spring
+
+
+
+
+
+
+ damping
+
+
+
+
+
damping of the spring
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Transition from/to the state of the view with matching heroID
+Will also force the view to use global coordinate space.
+
+
The following layer properties will be animated from the given view.
+
position
+bounds . size
+cornerRadius
+transform
+shadowColor
+shadowOpacity
+shadowOffset
+shadowRadius
+shadowPath
+
+
+
Note that the following properties won’t be taken from the source view.
+
backgroundColor
+borderWidth
+borderColor
+
+
+
+
+
Declaration
+
+
Swift
+
public static func source ( heroID : String ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ heroID
+
+
+
+
+
the source view’s heroId.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Works in combination with position modifier to apply a natural curve when moving to the destination.
+
+
+
+
Declaration
+
+
Swift
+
public static var arc : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Works in combination with position modifier to apply a natural curve when moving to the destination.
+
+
+
+
Declaration
+
+
Swift
+
public static func arc ( intensity : CGFloat = 1 ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ intensity
+
+
+
+
+
a value of 1 represent a downward natural curve ╰. a value of -1 represent a upward curve ╮.
+default is 1.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Cascade applys increasing delay modifiers to subviews
+
+
+
+
Declaration
+
+
Swift
+
public static var cascade : HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Cascade applys increasing delay modifiers to subviews
+
+
+
+
Declaration
+
+
Swift
+
public static func cascade ( delta : TimeInterval = 0.02 ,
+ direction : CascadeDirection = . topToBottom ,
+ delayMatchedViews : Bool = false ) -> HeroModifier
+
+
+
+
+
Parameters
+
+
+
+
+
+ delta
+
+
+
+
+
delay in between each animation
+
+
+
+
+
+
+ direction
+
+
+
+
+
+
+
+
+
+ delayMatchedViews
+
+
+
+
+
whether or not to delay matched subviews until all cascading animation have started
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Apply modifiers only if the condition return true.
+
+
+
+
Declaration
+
+
Swift
+
public static func when ( _ condition : @escaping ( HeroConditionalContext ) -> Bool , _ modifiers : [ HeroModifier ]) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func when ( _ condition : @escaping ( HeroConditionalContext ) -> Bool , _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func whenMatched ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func whenPresenting ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func whenDismissing ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func whenAppearing ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func whenDisappearing ( _ modifiers : HeroModifier ... ) -> HeroModifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroPlugin.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroPlugin.html
new file mode 100644
index 00000000..7857f3ad
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroPlugin.html
@@ -0,0 +1,945 @@
+
+
+
+ HeroPlugin Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroPlugin Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroPlugin
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Determines whether or not to receive seekTo
callback on every frame.
+
+
Default is false.
+
+
When requirePerFrameCallback is false , the plugin needs to start its own animations inside animate
& resume
+The seekTo
method is only being called during an interactive transition.
+
+
When requirePerFrameCallback is true , the plugin will receive seekTo
callback on every animation frame. Hence it is possible for the plugin to do per-frame animations without implementing animate
& resume
+
+
+
+
Declaration
+
+
Swift
+
open var requirePerFrameCallback : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override required init ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Called before any animation.
+Override this method when you want to preprocess modifiers for views
+
+
To check a view’s modifiers:
+
context [ view ]
+context [ view , "modifierName" ]
+
+
+
To set a view’s modifiers:
+
context [ view ] = [( "modifier1" , [ "parameter1" ]), ( "modifier2" , [])]
+context [ view , "modifier1" ] = [ "parameter1" , "parameter2" ]
+
+
+
+
+
Declaration
+
+
Swift
+
open func process ( fromViews : [ UIView ], toViews : [ UIView ])
+
+
+
+
+
Parameters
+
+
+
+
+
+ context
+
+
+
+
+
object holding all parsed and changed modifiers,
+
+
+
+
+
+
+ fromViews
+
+
+
+
+
A flattened list of all views from source ViewController
+
+
+
+
+
+
+ toViews
+
+
+
+
+
A flattened list of all views from destination ViewController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open func canAnimate ( view : UIView , appearing : Bool ) -> Bool
+
+
+
+
+
Parameters
+
+
+
+
+
+ context
+
+
+
+
+
object holding all parsed and changed modifiers,
+
+
+
+
+
+
+ view
+
+
+
+
+
the view to check whether or not the plugin can handle the animation
+
+
+
+
+
+
+ appearing
+
+
+
+
+
true if the view is appearing(i.e. a view in destination ViewController)
+If return true, Hero won’t animate and won’t let any other plugins animate this view.
+The view will also be hidden automatically during the animation.
+
+
+
+
+
+
+
+
Return Value
+
return true if the plugin can handle animating the view.
+
+
+
+
+
+
+
+
+
+
+
+
+
Perform the animation.
+
+
Note: views in fromViews
& toViews
are hidden already. Unhide then if you need to take snapshots.
+
+
+
+
Declaration
+
+
Swift
+
open func animate ( fromViews : [ UIView ], toViews : [ UIView ]) -> TimeInterval
+
+
+
+
+
Parameters
+
+
+
+
+
+ context
+
+
+
+
+
object holding all parsed and changed modifiers,
+
+
+
+
+
+
+ fromViews
+
+
+
+
+
A flattened list of all views from source ViewController (filtered by canAnimate
)
+
+
+
+
+
+
+ toViews
+
+
+
+
+
A flattened list of all views from destination ViewController (filtered by canAnimate
)
+
+
+
+
+
+
+
+
Return Value
+
The duration needed to complete the animation
+
+
+
+
+
+
+
+
+
+
+
+
+
Called when all animations are completed.
+
+
Should perform cleanup and release any reference
+
+
+
+
Declaration
+
+
Swift
+
open func clean ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
For supporting interactive animation only.
+
+
This method is called when an interactive animation is in place
+The plugin should pause the animation, and seek to the given progress
+
+
+
+
Declaration
+
+
Swift
+
open func seekTo ( timePassed : TimeInterval )
+
+
+
+
+
Parameters
+
+
+
+
+
+ timePassed
+
+
+
+
+
time of the animation to seek to.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
For supporting interactive animation only.
+
+
This method is called when an interactive animation is ended
+The plugin should resume the animation.
+
+
+timePassed: will be the same value since last seekTo
+reverse: a boolean value indicating whether or not the animation should reverse
+
+
+
+
+
Declaration
+
+
Swift
+
open func resume ( timePassed : TimeInterval , reverse : Bool ) -> TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
For supporting interactive animation only.
+
+
This method is called when user wants to override animation modifiers during an interactive animation
+
+
+
+
+
Parameters
+
+
+
+
+
+ state
+
+
+
+
+
the target state to override
+
+
+
+
+
+
+ view
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open func changeTarget ( state : HeroTargetState , isDestination : Bool , to view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static var isEnabled : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func enable ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func disable ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroTransition.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroTransition.html
new file mode 100644
index 00000000..e295f07c
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroTransition.html
@@ -0,0 +1,1706 @@
+
+
+
+ HeroTransition Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroTransition Class Reference
+
+
+
+
+
+
+
+
+
+
+
HeroTransition
+
+
+
open class HeroTransition : NSObject
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var containerColor : UIColor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isUserInteractionEnabled : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isTransitioning : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var isPresenting : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var transitioning : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var presenting : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
container we created to hold all animating views, will be a subview of the
+transitionContainer when transitioning
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var container : UIView !
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
destination view controller
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var toViewController : UIViewController ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
source view controller
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var fromViewController : UIViewController ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
context object holding transition informations
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var context : HeroContext !
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
whether or not we are handling transition interactively
+
+
+
+
Declaration
+
+
Swift
+
public var interactive : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
max duration needed by the animators
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var totalDuration : TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
progress of the current transition. 0 if no transition is happening
+
+
+
+
Declaration
+
+
Swift
+
public internal(set) var progress : Double { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override init ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Receive callbacks on each animation frame.
+Observers will be cleaned when transition completes
+
+
+observer: the observer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open func animate ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open func complete ( finished : Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func transition ( from : UIViewController , to : UIViewController , in view : UIView , completion : (( Bool ) -> Void )? = nil )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Update the progress for the interactive transition.
+
+
+progress: the current progress, must be between 0…1
+
+
+
+
+
Declaration
+
+
Swift
+
public func update ( _ percentageComplete : CGFloat )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Finish the interactive transition.
+Will stop the interactive transition and animate from the
+current state to the end state
+
+
+
+
Declaration
+
+
Swift
+
public func finish ( animate : Bool = true )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Cancel the interactive transition.
+Will stop the interactive transition and animate from the
+current state to the beginning state
+
+
+
+
Declaration
+
+
Swift
+
public func cancel ( animate : Bool = true )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Override modifiers during an interactive animation.
+
+
For example:
+
+
Hero.shared.apply([.position(x:50, y:50)], to:view)
+
+
will set the view’s position to 50, 50
+
+
+modifiers: the modifiers to override
+view: the view to override to
+
+
+
+
+
Declaration
+
+
Swift
+
public func apply ( modifiers : [ HeroModifier ], to view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Override target state during an interactive animation.
+
+
For example:
+
+
Hero.shared.changeTarget([.position(x:50, y:50)], to:view)
+
+
will animate the view’s position to 50, 50 once finish(animate:)
is called
+
+
+modifiers: the modifiers to override
+isDestination: if false, it changes the starting state
+view: the view to override to
+
+
+
+
+
Declaration
+
+
Swift
+
public func changeTarget ( modifiers : [ HeroModifier ], isDestination : Bool = true , to view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
open func start ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func navigationController ( _ navigationController : UINavigationController , willShow viewController : UIViewController , animated : Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func navigationController ( _ navigationController : UINavigationController , didShow viewController : UIViewController , animated : Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func navigationController ( _ navigationController : UINavigationController , animationControllerFor operation : UINavigationController . Operation , from fromVC : UIViewController , to toVC : UIViewController ) -> UIViewControllerAnimatedTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func navigationController ( _ navigationController : UINavigationController , interactionControllerFor animationController : UIViewControllerAnimatedTransitioning ) -> UIViewControllerInteractiveTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func tabBarController ( _ tabBarController : UITabBarController , shouldSelect viewController : UIViewController ) -> Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func tabBarController ( _ tabBarController : UITabBarController , interactionControllerFor animationController : UIViewControllerAnimatedTransitioning ) -> UIViewControllerInteractiveTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func tabBarController ( _ tabBarController : UITabBarController , animationControllerForTransitionFrom fromVC : UIViewController , to toVC : UIViewController ) -> UIViewControllerAnimatedTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func animationController ( forPresented presented : UIViewController , presenting : UIViewController , source : UIViewController ) -> UIViewControllerAnimatedTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func animationController ( forDismissed dismissed : UIViewController ) -> UIViewControllerAnimatedTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func interactionControllerForDismissal ( using animator : UIViewControllerAnimatedTransitioning ) -> UIViewControllerInteractiveTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func interactionControllerForPresentation ( using animator : UIViewControllerAnimatedTransitioning ) -> UIViewControllerInteractiveTransitioning ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func animateTransition ( using context : UIViewControllerContextTransitioning )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func transitionDuration ( using transitionContext : UIViewControllerContextTransitioning ?) -> TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func animationEnded ( _ transitionCompleted : Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var wantsInteractiveStart : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func startInteractiveTransition ( _ transitionContext : UIViewControllerContextTransitioning )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Lexer.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Lexer.html
new file mode 100644
index 00000000..393639ce
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Lexer.html
@@ -0,0 +1,328 @@
+
+
+
+ Lexer Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Lexer Class Reference
+
+
+
+
+
+
+
+
+
+
+
Lexer
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( input : String )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func tokenize () -> [ Token ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/NumberNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/NumberNode.html
new file mode 100644
index 00000000..7f87ad22
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/NumberNode.html
@@ -0,0 +1,358 @@
+
+
+
+ NumberNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ NumberNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
NumberNode
+
+
+
public class NumberNode : ExprNode
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public let value : Float
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( value : Float )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Parser.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Parser.html
new file mode 100644
index 00000000..e1031b72
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Parser.html
@@ -0,0 +1,328 @@
+
+
+
+ Parser Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Parser Class Reference
+
+
+
+
+
+
+
+
+
+
+
Parser
+
+
+
public class Parser
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( tokens : [ Token ])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func parse () throws -> [ ExprNode ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/PrototypeNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/PrototypeNode.html
new file mode 100644
index 00000000..1f372c9b
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/PrototypeNode.html
@@ -0,0 +1,358 @@
+
+
+
+ PrototypeNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ PrototypeNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
PrototypeNode
+
+
+
public class PrototypeNode : ExprNode
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public let argumentNames : [ String ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( name : String , argumentNames : [ String ])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/VariableNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/VariableNode.html
new file mode 100644
index 00000000..a66afe2e
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/VariableNode.html
@@ -0,0 +1,298 @@
+
+
+
+ VariableNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ VariableNode Class Reference
+
+
+
+
+
+
+
+
+
+
+
VariableNode
+
+
+
public class VariableNode : ExprNode
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public override var description : String { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums.html
new file mode 100644
index 00000000..104d4fbf
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums.html
@@ -0,0 +1,534 @@
+
+
+
+ Enumerations Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Enumerations Reference
+
+
+
+
+
+
+
+
+
+
+
Enumerations
+
The following enumerations are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum HeroSnapshotType
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum HeroCoordinateSpace
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum HeroViewOrderingStrategy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum Token
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum ParseError : Error
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum CascadeDirection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum HeroDefaultAnimationType
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum HeroTransitionState : Int
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/CascadeDirection.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/CascadeDirection.html
new file mode 100644
index 00000000..c32bf493
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/CascadeDirection.html
@@ -0,0 +1,508 @@
+
+
+
+ CascadeDirection Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ CascadeDirection Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
CascadeDirection
+
+
+
public enum CascadeDirection
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case topToBottom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case bottomToTop
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case leftToRight
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case rightToLeft
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case radial ( center : CGPoint )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case inverseRadial ( center : CGPoint )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static var leadingToTrailing : CascadeDirection { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static var trailingToLeading : CascadeDirection { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroCoordinateSpace.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroCoordinateSpace.html
new file mode 100644
index 00000000..c66ce6a2
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroCoordinateSpace.html
@@ -0,0 +1,328 @@
+
+
+
+ HeroCoordinateSpace Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroCoordinateSpace Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
HeroCoordinateSpace
+
+
+
public enum HeroCoordinateSpace
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case global
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType.html
new file mode 100644
index 00000000..d2a2fa93
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType.html
@@ -0,0 +1,844 @@
+
+
+
+ HeroDefaultAnimationType Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroDefaultAnimationType Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
HeroDefaultAnimationType
+
+
+
public enum HeroDefaultAnimationType
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public enum Strategy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case push ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case pull ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case cover ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case uncover ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case slide ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case zoomSlide ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case pageIn ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case pageOut ( direction : Direction )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case zoomOut
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
indirect case selectBy ( presenting : HeroDefaultAnimationType , dismissing : HeroDefaultAnimationType )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func autoReverse ( presenting : HeroDefaultAnimationType ) -> HeroDefaultAnimationType
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var label : String ? { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func from ( node : ExprNode ) -> HeroDefaultAnimationType ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Direction.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Direction.html
new file mode 100644
index 00000000..877cb861
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Direction.html
@@ -0,0 +1,478 @@
+
+
+
+ Direction Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Direction Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
Direction
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func from ( node : ExprNode ) -> Direction ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static var leading : Direction { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static var trailing : Direction { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Strategy.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Strategy.html
new file mode 100644
index 00000000..b583e381
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Strategy.html
@@ -0,0 +1,358 @@
+
+
+
+ Strategy Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Strategy Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
Strategy
+
+
+
public enum Strategy
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case forceLeftToRight
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case forceRightToLeft
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case userInterface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroSnapshotType.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroSnapshotType.html
new file mode 100644
index 00000000..2be51fcb
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroSnapshotType.html
@@ -0,0 +1,393 @@
+
+
+
+ HeroSnapshotType Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroSnapshotType Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
HeroSnapshotType
+
+
+
public enum HeroSnapshotType
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Will optimize for different type of views
+For custom views or views with masking, .optimizedDefault might create snapshots
+that appear differently than the actual view.
+In that case, use .normal or .slowRender to disable the optimization
+
+
+
+
Declaration
+
+
Swift
+
case optimized
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
snapshotView(afterScreenUpdates:)
+
+
+
+
Declaration
+
+
Swift
+
case normal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
layer.render(in: currentContext)
+
+
+
+
Declaration
+
+
Swift
+
case layerRender
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
will not create snapshot. animate the view directly.
+This will mess up the view hierarchy, therefore, view controllers have to rebuild
+its view structure after the transition finishes
+
+
+
+
Declaration
+
+
Swift
+
case noSnapshot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroTransitionState.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroTransitionState.html
new file mode 100644
index 00000000..3d100544
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroTransitionState.html
@@ -0,0 +1,418 @@
+
+
+
+ HeroTransitionState Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroTransitionState Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
HeroTransitionState
+
+
+
public enum HeroTransitionState : Int
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case possible
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case notified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case starting
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case animating
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case completing
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroViewOrderingStrategy.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroViewOrderingStrategy.html
new file mode 100644
index 00000000..b7531b28
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroViewOrderingStrategy.html
@@ -0,0 +1,358 @@
+
+
+
+ HeroViewOrderingStrategy Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroViewOrderingStrategy Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
HeroViewOrderingStrategy
+
+
+
public enum HeroViewOrderingStrategy
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case sourceViewOnTop
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case destinationViewOnTop
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/ParseError.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/ParseError.html
new file mode 100644
index 00000000..26ec7263
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/ParseError.html
@@ -0,0 +1,448 @@
+
+
+
+ ParseError Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ ParseError Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
ParseError
+
+
+
public enum ParseError : Error
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case unexpectToken
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case undefinedOperator ( String )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case expectCharacter ( Character )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case expectExpression
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case expectArgumentList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case expectFunctionName
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/Token.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/Token.html
new file mode 100644
index 00000000..41cccbb6
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/Token.html
@@ -0,0 +1,448 @@
+
+
+
+ Token Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Token Enumeration Reference
+
+
+
+
+
+
+
+
+
+
+
Token
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case identifier ( String , CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case number ( Float , CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case parensOpen ( CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case parensClose ( CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case comma ( CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
case other ( String , CountableRange < Int > )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions.html
new file mode 100644
index 00000000..b875e14d
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions.html
@@ -0,0 +1,548 @@
+
+
+
+ Extensions Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Extensions Reference
+
+
+
+
+
+
+
+
+
+
+
Extensions
+
The following extensions are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
extension HeroDebugView : UIGestureRecognizerDelegate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public extension CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
extension CATransform3D : Equatable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public extension UIView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public extension UIViewController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
extension UINavigationController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
extension UITabBarController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public extension String
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CAMediaTimingFunction.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CAMediaTimingFunction.html
new file mode 100644
index 00000000..53ebe48c
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CAMediaTimingFunction.html
@@ -0,0 +1,567 @@
+
+
+
+ CAMediaTimingFunction Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ CAMediaTimingFunction Extension Reference
+
+
+
+
+
+
+
+
+
+
+
CAMediaTimingFunction
+
+
+
public extension CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let linear : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let easeIn : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let easeOut : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let easeInOut : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let standard : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let deceleration : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let acceleration : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let sharp : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static let easeOutBack : CAMediaTimingFunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
static func from ( name : String ) -> CAMediaTimingFunction ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CATransform3D.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CATransform3D.html
new file mode 100644
index 00000000..7766c3dd
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CATransform3D.html
@@ -0,0 +1,296 @@
+
+
+
+ CATransform3D Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ CATransform3D Extension Reference
+
+
+
+
+
+
+
+
+
+
+
CATransform3D
+
+
+
extension CATransform3D : Equatable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public static func == ( lhs : CATransform3D , rhs : CATransform3D ) -> Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/HeroDebugView.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/HeroDebugView.html
new file mode 100644
index 00000000..fea8b8e5
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/HeroDebugView.html
@@ -0,0 +1,279 @@
+
+
+
+ HeroDebugView Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroDebugView Extension Reference
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/String.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/String.html
new file mode 100644
index 00000000..49b8309a
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/String.html
@@ -0,0 +1,297 @@
+
+
+
+ String Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ String Extension Reference
+
+
+
+
+
+
+
+
+
+
+
String
+
+
+
public extension String
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func match ( regex : String ) -> ( String , CountableRange < Int > )?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UINavigationController.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UINavigationController.html
new file mode 100644
index 00000000..cd585556
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UINavigationController.html
@@ -0,0 +1,279 @@
+
+
+
+ UINavigationController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ UINavigationController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
UINavigationController
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UITabBarController.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UITabBarController.html
new file mode 100644
index 00000000..d3578269
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UITabBarController.html
@@ -0,0 +1,328 @@
+
+
+
+ UITabBarController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ UITabBarController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
UITabBarController
+
+
+
extension UITabBarController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+public var heroTabBarAnimationTypeString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIView.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIView.html
new file mode 100644
index 00000000..83f6ec6f
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIView.html
@@ -0,0 +1,421 @@
+
+
+
+ UIView Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ UIView Extension Reference
+
+
+
+
+
+
+
+
+
+
+
UIView
+
+
+
public extension UIView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+var heroID : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+var isHeroEnabled : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+var isHeroEnabledForSubviews : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var heroModifiers : [ HeroModifier ]? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+var heroModifierString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIViewController.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIViewController.html
new file mode 100644
index 00000000..c662f574
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIViewController.html
@@ -0,0 +1,636 @@
+
+
+
+ UIViewController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ UIViewController Extension Reference
+
+
+
+
+
+
+
+
+
+
+
UIViewController
+
+
+
public extension UIViewController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+public var heroModalAnimationTypeString : String ? { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBInspectable
+public var isHeroEnabled : Bool { get set }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBAction
+public func ht_dismiss ( _ sender : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func heroReplaceViewController ( with next : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBAction
+public func hero_dismissViewController ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@IBAction
+public func hero_unwindToRootViewController ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hero_unwindToViewController ( _ toViewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hero_unwindToViewController ( withSelector : Selector )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hero_unwindToViewController ( withClass : AnyClass )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hero_unwindToViewController ( withMatchBlock : ( UIViewController ) -> Bool )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public func hero_replaceViewController ( with next : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Functions.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Functions.html
new file mode 100644
index 00000000..a44d8efa
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Functions.html
@@ -0,0 +1,292 @@
+
+
+
+ Functions Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Functions Reference
+
+
+
+
+
+
+
+
+
+
+
Functions
+
The following functions are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols.html
new file mode 100644
index 00000000..3cf58fc9
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols.html
@@ -0,0 +1,531 @@
+
+
+
+ Protocols Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Protocols Reference
+
+
+
+
+
+
+
+
+
+
+
Protocols
+
The following protocols are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroCompatible
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Allows a view to create their own custom snapshot when using Optimized snapshot
+
+
See more
+
+
+
Declaration
+
+
Swift
+
public protocol HeroCustomSnapshotView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroPreprocessor : AnyObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroAnimator : AnyObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroProgressUpdateObserver : AnyObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+public protocol HeroViewControllerDelegate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroStringConvertible
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public protocol HeroTransitionDelegate : AnyObject
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroAnimator.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroAnimator.html
new file mode 100644
index 00000000..a432928f
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroAnimator.html
@@ -0,0 +1,508 @@
+
+
+
+ HeroAnimator Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroAnimator Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroAnimator
+
+
+
public protocol HeroAnimator : AnyObject
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func canAnimate ( view : UIView , appearing : Bool ) -> Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func animate ( fromViews : [ UIView ], toViews : [ UIView ]) -> TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func clean ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func seekTo ( timePassed : TimeInterval )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func resume ( timePassed : TimeInterval , reverse : Bool ) -> TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func changeTarget ( state : HeroTargetState , isDestination : Bool , to view : UIView )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCompatible.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCompatible.html
new file mode 100644
index 00000000..b66efbcb
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCompatible.html
@@ -0,0 +1,336 @@
+
+
+
+ HeroCompatible Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroCompatible Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroCompatible
+
+
+
public protocol HeroCompatible
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
associatedtype CompatibleType
+
+
+
+
+
+
+
+
+
+
+
+
+ hero
+
+
+ Default implementation
+
+
+
+
+
+
+
+ Default Implementation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCustomSnapshotView.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCustomSnapshotView.html
new file mode 100644
index 00000000..13438a61
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCustomSnapshotView.html
@@ -0,0 +1,298 @@
+
+
+
+ HeroCustomSnapshotView Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroCustomSnapshotView Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroCustomSnapshotView
+
+
+
public protocol HeroCustomSnapshotView
+
+
+
+
Allows a view to create their own custom snapshot when using Optimized snapshot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
var heroSnapshot : UIView ? { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroPreprocessor.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroPreprocessor.html
new file mode 100644
index 00000000..05ac19c9
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroPreprocessor.html
@@ -0,0 +1,328 @@
+
+
+
+ HeroPreprocessor Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroPreprocessor Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroPreprocessor
+
+
+
public protocol HeroPreprocessor : AnyObject
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func process ( fromViews : [ UIView ], toViews : [ UIView ])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroProgressUpdateObserver.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroProgressUpdateObserver.html
new file mode 100644
index 00000000..a60b00ad
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroProgressUpdateObserver.html
@@ -0,0 +1,298 @@
+
+
+
+ HeroProgressUpdateObserver Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroProgressUpdateObserver Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroProgressUpdateObserver
+
+
+
public protocol HeroProgressUpdateObserver : AnyObject
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func heroDidUpdateProgress ( progress : Double )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroStringConvertible.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroStringConvertible.html
new file mode 100644
index 00000000..e07f639f
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroStringConvertible.html
@@ -0,0 +1,298 @@
+
+
+
+ HeroStringConvertible Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroStringConvertible Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroStringConvertible
+
+
+
public protocol HeroStringConvertible
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
static func from ( node : ExprNode ) -> ` Self `?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroTransitionDelegate.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroTransitionDelegate.html
new file mode 100644
index 00000000..8b8cafc9
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroTransitionDelegate.html
@@ -0,0 +1,328 @@
+
+
+
+ HeroTransitionDelegate Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroTransitionDelegate Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroTransitionDelegate
+
+
+
public protocol HeroTransitionDelegate : AnyObject
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
func heroTransition ( _ hero : HeroTransition , didUpdate progress : Double )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroViewControllerDelegate.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroViewControllerDelegate.html
new file mode 100644
index 00000000..29cfaf1d
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroViewControllerDelegate.html
@@ -0,0 +1,548 @@
+
+
+
+ HeroViewControllerDelegate Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroViewControllerDelegate Protocol Reference
+
+
+
+
+
+
+
+
+
+
+
HeroViewControllerDelegate
+
+
+
@objc
+public protocol HeroViewControllerDelegate
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroWillStartAnimatingFrom ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidEndAnimatingFrom ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidCancelAnimatingFrom ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroWillStartTransition ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidEndTransition ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidCancelTransition ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroWillStartAnimatingTo ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidEndAnimatingTo ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
@objc
+optional func heroDidCancelAnimatingTo ( viewController : UIViewController )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs.html
new file mode 100644
index 00000000..05a612f4
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs.html
@@ -0,0 +1,328 @@
+
+
+
+ Structures Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Structures Reference
+
+
+
+
+
+
+
+
+
+
+
Structures
+
The following structures are available globally.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public struct HeroTargetState
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public struct HeroConditionalContext
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroConditionalContext.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroConditionalContext.html
new file mode 100644
index 00000000..fd2c797c
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroConditionalContext.html
@@ -0,0 +1,658 @@
+
+
+
+ HeroConditionalContext Structure Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroConditionalContext Structure Reference
+
+
+
+
+
+
+
+
+
+
+
HeroConditionalContext
+
+
+
public struct HeroConditionalContext
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public weak var view : UIView !
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public private(set) var isAppearing : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isPresenting : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isInTabbarController : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isInNavbarController : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isMatched : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var isAncestorViewMatched : Bool { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var matchedView : UIView ? { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var matchedAncestorView : ( UIView , UIView )? { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var fromViewController : UIViewController { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var toViewController : UIViewController { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var currentViewController : UIViewController { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var otherViewController : UIViewController { get }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroTargetState.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroTargetState.html
new file mode 100644
index 00000000..31ba2130
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroTargetState.html
@@ -0,0 +1,1444 @@
+
+
+
+ HeroTargetState Structure Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ HeroTargetState Structure Reference
+
+
+
+
+
+
+
+
+
+
+
HeroTargetState
+
+
+
public struct HeroTargetState
+
+
+
+
Undocumented
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var position : CGPoint ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var size : CGSize ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var transform : CATransform3D ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var opacity : Float ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var cornerRadius : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var backgroundColor : CGColor ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var zPosition : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var contentsRect : CGRect ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var contentsScale : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var borderWidth : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var borderColor : CGColor ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var shadowColor : CGColor ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var shadowOpacity : Float ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var shadowOffset : CGSize ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var shadowRadius : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var shadowPath : CGPath ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var masksToBounds : Bool ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var displayShadow : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var overlay : ( color : CGColor , opacity : CGFloat )?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var spring : ( CGFloat , CGFloat )?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var delay : TimeInterval
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var duration : TimeInterval ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var timingFunction : CAMediaTimingFunction ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var arc : CGFloat ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var source : String ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var ignoreSubviewModifiers : Bool ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var useScaleBasedSizeChange : Bool ?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var nonFade : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var forceAnimate : Bool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public var custom : [ String : Any ]?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public mutating func append ( _ modifier : HeroModifier )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public mutating func append ( contentsOf modifiers : [ HeroModifier ])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public subscript ( key : String ) -> Any ? { get set }
+
+
+
+
+
Return Value
+
custom item for a specific key
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Declaration
+
+
Swift
+
public init ( arrayLiteral elements : HeroModifier ... )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/css/highlight.css b/docs/docsets/Hero.docset/Contents/Resources/Documents/css/highlight.css
new file mode 100644
index 00000000..d0db0e13
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/css/highlight.css
@@ -0,0 +1,200 @@
+/* Credit to https://gist.github.com/wataru420/2048287 */
+.highlight {
+ /* Comment */
+ /* Error */
+ /* Keyword */
+ /* Operator */
+ /* Comment.Multiline */
+ /* Comment.Preproc */
+ /* Comment.Single */
+ /* Comment.Special */
+ /* Generic.Deleted */
+ /* Generic.Deleted.Specific */
+ /* Generic.Emph */
+ /* Generic.Error */
+ /* Generic.Heading */
+ /* Generic.Inserted */
+ /* Generic.Inserted.Specific */
+ /* Generic.Output */
+ /* Generic.Prompt */
+ /* Generic.Strong */
+ /* Generic.Subheading */
+ /* Generic.Traceback */
+ /* Keyword.Constant */
+ /* Keyword.Declaration */
+ /* Keyword.Pseudo */
+ /* Keyword.Reserved */
+ /* Keyword.Type */
+ /* Literal.Number */
+ /* Literal.String */
+ /* Name.Attribute */
+ /* Name.Builtin */
+ /* Name.Class */
+ /* Name.Constant */
+ /* Name.Entity */
+ /* Name.Exception */
+ /* Name.Function */
+ /* Name.Namespace */
+ /* Name.Tag */
+ /* Name.Variable */
+ /* Operator.Word */
+ /* Text.Whitespace */
+ /* Literal.Number.Float */
+ /* Literal.Number.Hex */
+ /* Literal.Number.Integer */
+ /* Literal.Number.Oct */
+ /* Literal.String.Backtick */
+ /* Literal.String.Char */
+ /* Literal.String.Doc */
+ /* Literal.String.Double */
+ /* Literal.String.Escape */
+ /* Literal.String.Heredoc */
+ /* Literal.String.Interpol */
+ /* Literal.String.Other */
+ /* Literal.String.Regex */
+ /* Literal.String.Single */
+ /* Literal.String.Symbol */
+ /* Name.Builtin.Pseudo */
+ /* Name.Variable.Class */
+ /* Name.Variable.Global */
+ /* Name.Variable.Instance */
+ /* Literal.Number.Integer.Long */ }
+ .highlight .c {
+ color: #999988;
+ font-style: italic; }
+ .highlight .err {
+ color: #a61717;
+ background-color: #e3d2d2; }
+ .highlight .k {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .o {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .cm {
+ color: #999988;
+ font-style: italic; }
+ .highlight .cp {
+ color: #999999;
+ font-weight: bold; }
+ .highlight .c1 {
+ color: #999988;
+ font-style: italic; }
+ .highlight .cs {
+ color: #999999;
+ font-weight: bold;
+ font-style: italic; }
+ .highlight .gd {
+ color: #000000;
+ background-color: #ffdddd; }
+ .highlight .gd .x {
+ color: #000000;
+ background-color: #ffaaaa; }
+ .highlight .ge {
+ color: #000000;
+ font-style: italic; }
+ .highlight .gr {
+ color: #aa0000; }
+ .highlight .gh {
+ color: #999999; }
+ .highlight .gi {
+ color: #000000;
+ background-color: #ddffdd; }
+ .highlight .gi .x {
+ color: #000000;
+ background-color: #aaffaa; }
+ .highlight .go {
+ color: #888888; }
+ .highlight .gp {
+ color: #555555; }
+ .highlight .gs {
+ font-weight: bold; }
+ .highlight .gu {
+ color: #aaaaaa; }
+ .highlight .gt {
+ color: #aa0000; }
+ .highlight .kc {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .kd {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .kp {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .kr {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .kt {
+ color: #445588; }
+ .highlight .m {
+ color: #009999; }
+ .highlight .s {
+ color: #d14; }
+ .highlight .na {
+ color: #008080; }
+ .highlight .nb {
+ color: #0086B3; }
+ .highlight .nc {
+ color: #445588;
+ font-weight: bold; }
+ .highlight .no {
+ color: #008080; }
+ .highlight .ni {
+ color: #800080; }
+ .highlight .ne {
+ color: #990000;
+ font-weight: bold; }
+ .highlight .nf {
+ color: #990000; }
+ .highlight .nn {
+ color: #555555; }
+ .highlight .nt {
+ color: #000080; }
+ .highlight .nv {
+ color: #008080; }
+ .highlight .ow {
+ color: #000000;
+ font-weight: bold; }
+ .highlight .w {
+ color: #bbbbbb; }
+ .highlight .mf {
+ color: #009999; }
+ .highlight .mh {
+ color: #009999; }
+ .highlight .mi {
+ color: #009999; }
+ .highlight .mo {
+ color: #009999; }
+ .highlight .sb {
+ color: #d14; }
+ .highlight .sc {
+ color: #d14; }
+ .highlight .sd {
+ color: #d14; }
+ .highlight .s2 {
+ color: #d14; }
+ .highlight .se {
+ color: #d14; }
+ .highlight .sh {
+ color: #d14; }
+ .highlight .si {
+ color: #d14; }
+ .highlight .sx {
+ color: #d14; }
+ .highlight .sr {
+ color: #009926; }
+ .highlight .s1 {
+ color: #d14; }
+ .highlight .ss {
+ color: #990073; }
+ .highlight .bp {
+ color: #999999; }
+ .highlight .vc {
+ color: #008080; }
+ .highlight .vg {
+ color: #008080; }
+ .highlight .vi {
+ color: #008080; }
+ .highlight .il {
+ color: #009999; }
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/Hero.docset/Contents/Resources/Documents/css/jazzy.css
new file mode 100644
index 00000000..833be0d2
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/css/jazzy.css
@@ -0,0 +1,378 @@
+*, *:before, *:after {
+ box-sizing: inherit; }
+
+body {
+ margin: 0;
+ background: #fff;
+ color: #333;
+ font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
+ letter-spacing: .2px;
+ -webkit-font-smoothing: antialiased;
+ box-sizing: border-box; }
+
+h1 {
+ font-size: 2rem;
+ font-weight: 700;
+ margin: 1.275em 0 0.6em; }
+
+h2 {
+ font-size: 1.75rem;
+ font-weight: 700;
+ margin: 1.275em 0 0.3em; }
+
+h3 {
+ font-size: 1.5rem;
+ font-weight: 700;
+ margin: 1em 0 0.3em; }
+
+h4 {
+ font-size: 1.25rem;
+ font-weight: 700;
+ margin: 1.275em 0 0.85em; }
+
+h5 {
+ font-size: 1rem;
+ font-weight: 700;
+ margin: 1.275em 0 0.85em; }
+
+h6 {
+ font-size: 1rem;
+ font-weight: 700;
+ margin: 1.275em 0 0.85em;
+ color: #777; }
+
+p {
+ margin: 0 0 1em; }
+
+ul, ol {
+ padding: 0 0 0 2em;
+ margin: 0 0 0.85em; }
+
+blockquote {
+ margin: 0 0 0.85em;
+ padding: 0 15px;
+ color: #858585;
+ border-left: 4px solid #e5e5e5; }
+
+img {
+ max-width: 100%; }
+
+a {
+ color: #4183c4;
+ text-decoration: none; }
+ a:hover, a:focus {
+ outline: 0;
+ text-decoration: underline; }
+ a.discouraged {
+ text-decoration: line-through; }
+ a.discouraged:hover, a.discouraged:focus {
+ text-decoration: underline line-through; }
+
+table {
+ background: #fff;
+ width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+ overflow: auto;
+ margin: 0 0 0.85em; }
+
+tr:nth-child(2n) {
+ background-color: #fbfbfb; }
+
+th, td {
+ padding: 6px 13px;
+ border: 1px solid #ddd; }
+
+pre {
+ margin: 0 0 1.275em;
+ padding: .85em 1em;
+ overflow: auto;
+ background: #f7f7f7;
+ font-size: .85em;
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; }
+
+code {
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; }
+
+p > code, li > code {
+ background: #f7f7f7;
+ padding: .2em; }
+ p > code:before, p > code:after, li > code:before, li > code:after {
+ letter-spacing: -.2em;
+ content: "\00a0"; }
+
+pre code {
+ padding: 0;
+ white-space: pre; }
+
+.content-wrapper {
+ display: flex;
+ flex-direction: column; }
+ @media (min-width: 768px) {
+ .content-wrapper {
+ flex-direction: row; } }
+
+.header {
+ display: flex;
+ padding: 8px;
+ font-size: 0.875em;
+ background: #444;
+ color: #999; }
+
+.header-col {
+ margin: 0;
+ padding: 0 8px; }
+
+.header-col--primary {
+ flex: 1; }
+
+.header-link {
+ color: #fff; }
+
+.header-icon {
+ padding-right: 6px;
+ vertical-align: -4px;
+ height: 16px; }
+
+.breadcrumbs {
+ font-size: 0.875em;
+ padding: 8px 16px;
+ margin: 0;
+ background: #fbfbfb;
+ border-bottom: 1px solid #ddd; }
+
+.carat {
+ height: 10px;
+ margin: 0 5px; }
+
+.navigation {
+ order: 2; }
+ @media (min-width: 768px) {
+ .navigation {
+ order: 1;
+ width: 25%;
+ max-width: 300px;
+ padding-bottom: 64px;
+ overflow: hidden;
+ word-wrap: normal;
+ background: #fbfbfb;
+ border-right: 1px solid #ddd; } }
+
+.nav-groups {
+ list-style-type: none;
+ padding-left: 0; }
+
+.nav-group-name {
+ border-bottom: 1px solid #ddd;
+ padding: 8px 0 8px 16px; }
+
+.nav-group-name-link {
+ color: #333; }
+
+.nav-group-tasks {
+ margin: 8px 0;
+ padding: 0 0 0 8px; }
+
+.nav-group-task {
+ font-size: 1em;
+ list-style-type: none;
+ white-space: nowrap; }
+
+.nav-group-task-link {
+ color: #808080; }
+
+.main-content {
+ order: 1; }
+ @media (min-width: 768px) {
+ .main-content {
+ order: 2;
+ flex: 1;
+ padding-bottom: 60px; } }
+
+.section {
+ padding: 0 32px;
+ border-bottom: 1px solid #ddd; }
+
+.section-content {
+ max-width: 834px;
+ margin: 0 auto;
+ padding: 16px 0; }
+
+.section-name {
+ color: #666;
+ display: block; }
+
+.declaration .highlight {
+ overflow-x: initial;
+ padding: 8px 0;
+ margin: 0;
+ background-color: transparent;
+ border: none; }
+
+.task-group-section {
+ border-top: 1px solid #ddd; }
+
+.task-group {
+ padding-top: 0px; }
+
+.task-name-container a[name]:before {
+ content: "";
+ display: block; }
+
+.item-container {
+ padding: 0; }
+
+.item {
+ padding-top: 8px;
+ width: 100%;
+ list-style-type: none; }
+ .item a[name]:before {
+ content: "";
+ display: block; }
+ .item .token, .item .direct-link {
+ padding-left: 3px;
+ margin-left: 0px;
+ font-size: 1rem; }
+ .item .declaration-note {
+ font-size: .85em;
+ color: #808080;
+ font-style: italic; }
+
+.pointer-container {
+ border-bottom: 1px solid #ddd;
+ left: -23px;
+ padding-bottom: 13px;
+ position: relative;
+ width: 110%; }
+
+.pointer {
+ left: 21px;
+ top: 7px;
+ display: block;
+ position: absolute;
+ width: 12px;
+ height: 12px;
+ border-left: 1px solid #ddd;
+ border-top: 1px solid #ddd;
+ background: #fff;
+ transform: rotate(45deg); }
+
+.height-container {
+ display: none;
+ position: relative;
+ width: 100%;
+ overflow: hidden; }
+ .height-container .section {
+ background: #fff;
+ border: 1px solid #ddd;
+ border-top-width: 0;
+ padding-top: 10px;
+ padding-bottom: 5px;
+ padding: 8px 16px; }
+
+.aside, .language {
+ padding: 6px 12px;
+ margin: 12px 0;
+ border-left: 5px solid #dddddd;
+ overflow-y: hidden; }
+ .aside .aside-title, .language .aside-title {
+ font-size: 9px;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+ padding-bottom: 0;
+ margin: 0;
+ color: #aaa;
+ -webkit-user-select: none; }
+ .aside p:last-child, .language p:last-child {
+ margin-bottom: 0; }
+
+.language {
+ border-left: 5px solid #cde9f4; }
+ .language .aside-title {
+ color: #4183c4; }
+
+.aside-warning, .aside-deprecated, .aside-unavailable {
+ border-left: 5px solid #ff6666; }
+ .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title {
+ color: #ff0000; }
+
+.graybox {
+ border-collapse: collapse;
+ width: 100%; }
+ .graybox p {
+ margin: 0;
+ word-break: break-word;
+ min-width: 50px; }
+ .graybox td {
+ border: 1px solid #ddd;
+ padding: 5px 25px 5px 10px;
+ vertical-align: middle; }
+ .graybox tr td:first-of-type {
+ text-align: right;
+ padding: 7px;
+ vertical-align: top;
+ word-break: normal;
+ width: 40px; }
+
+.slightly-smaller {
+ font-size: 0.9em; }
+
+.footer {
+ padding: 8px 16px;
+ background: #444;
+ color: #ddd;
+ font-size: 0.8em; }
+ .footer p {
+ margin: 8px 0; }
+ .footer a {
+ color: #fff; }
+
+html.dash .header, html.dash .breadcrumbs, html.dash .navigation {
+ display: none; }
+
+html.dash .height-container {
+ display: block; }
+
+form[role=search] input {
+ font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 24px;
+ padding: 0 10px;
+ margin: 0;
+ border: none;
+ border-radius: 1em; }
+ .loading form[role=search] input {
+ background: white url(../img/spinner.gif) center right 4px no-repeat; }
+
+form[role=search] .tt-menu {
+ margin: 0;
+ min-width: 300px;
+ background: #fbfbfb;
+ color: #333;
+ border: 1px solid #ddd; }
+
+form[role=search] .tt-highlight {
+ font-weight: bold; }
+
+form[role=search] .tt-suggestion {
+ font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif;
+ padding: 0 8px; }
+ form[role=search] .tt-suggestion span {
+ display: table-cell;
+ white-space: nowrap; }
+ form[role=search] .tt-suggestion .doc-parent-name {
+ width: 100%;
+ text-align: right;
+ font-weight: normal;
+ font-size: 0.9em;
+ padding-left: 16px; }
+
+form[role=search] .tt-suggestion:hover,
+form[role=search] .tt-suggestion.tt-cursor {
+ cursor: pointer;
+ background-color: #4183c4;
+ color: #fff; }
+
+form[role=search] .tt-suggestion:hover .doc-parent-name,
+form[role=search] .tt-suggestion.tt-cursor .doc-parent-name {
+ color: #fff; }
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/img/carat.png b/docs/docsets/Hero.docset/Contents/Resources/Documents/img/carat.png
new file mode 100755
index 00000000..29d2f7fd
Binary files /dev/null and b/docs/docsets/Hero.docset/Contents/Resources/Documents/img/carat.png differ
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/img/dash.png b/docs/docsets/Hero.docset/Contents/Resources/Documents/img/dash.png
new file mode 100755
index 00000000..6f694c7a
Binary files /dev/null and b/docs/docsets/Hero.docset/Contents/Resources/Documents/img/dash.png differ
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/img/gh.png b/docs/docsets/Hero.docset/Contents/Resources/Documents/img/gh.png
new file mode 100755
index 00000000..628da97c
Binary files /dev/null and b/docs/docsets/Hero.docset/Contents/Resources/Documents/img/gh.png differ
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/img/spinner.gif b/docs/docsets/Hero.docset/Contents/Resources/Documents/img/spinner.gif
new file mode 100644
index 00000000..e3038d0a
Binary files /dev/null and b/docs/docsets/Hero.docset/Contents/Resources/Documents/img/spinner.gif differ
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/index.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/index.html
new file mode 100644
index 00000000..dfc1ce90
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/index.html
@@ -0,0 +1,398 @@
+
+
+
+ Hero Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Hero Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hero is a library for building iOS view controller transitions. It provides a declarative layer on top of the UIKit’s cumbersome transition APIs—making custom transitions an easy task for developers.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hero is similar to Keynote’s Magic Move . It checks the heroID
property on all source and destination views. Every matched view pair is then automatically transitioned from its old state to its new state.
+
+
Hero can also construct animations for unmatched views. It is easy to define these animations via the heroModifiers
property. Hero will run these animations alongside the Magic Move animations. All of these animations can be interactively controlled by user gestures.
+
+
At view controller level, Hero provides several template transitions that you can set through heroModalAnimationType
, heroNavigationAnimationType
, and heroTabBarAnimationType
. These can be used as the foundation of your custom transitions. Combine with heroID
& heroModifiers
to make your own unique transitions.
+
+
+
+
+
By default, Hero provides dynamic duration based on the Material Design Motion Guide . Duration is automatically determined by changes to distance and size—saving you the hassle, while providing consistent and delightful animations.
+
+
Hero doesn’t make any assumptions about how the view is built or structured. It won’t modify any of your views’ states other than hiding them during the animation. This makes it work with Auto Layout , programmatic layout , UICollectionView (without modifying its layout object), UITableView , UINavigationController , UITabBarController , etc…
+
Example Gallery
+
+
Checkout the Example Gallery Blog Post for a general idea of what you can achieve with Hero
+
Usage Example 1
+
+
+
View Controller 1
+
redView . hero . id = "ironMan"
+blackView . hero . id = "batMan"
+
+
View Controller 2
+
self . hero . isEnabled = true
+redView . hero . id = "ironMan"
+blackView . hero . id = "batMan"
+whiteView . hero . modifiers = [ . translate ( y : 100 )]
+
+
Usage Example 2
+
+
+
View Controller 1
+
greyView . hero . id = "skyWalker"
+
+
View Controller 2
+
self . hero . isEnabled = true
+greyView . hero . id = "skyWalker"
+
+// collectionView is the parent view of all red cells
+collectionView . hero . modifiers = [ . cascade ]
+for cell in redCells {
+ cell . hero . modifiers = [ . fade , . scale ( 0.5 )]
+}
+
+
+
You can do these in the storyboard too!
+
+
+
+
Installation
+
CocoaPods
+
+
Add the following entry to your Podfile:
+
pod 'Hero'
+
+
+
Then run pod install
.
+
+
Don’t forget to import Hero
in every file you’d like to use Hero.
+
Carthage
+
+
Add the following entry to your Cartfile
:
+
github "HeroTransitions/Hero"
+
+
+
Then run carthage update
.
+
+
If this is your first time using Carthage in the project, you’ll need to go through some additional steps as explained over at Carthage .
+
Swift Package Manager
+
+
To integrate using Apple’s Swift package manager, add the following as a dependency to your Package.swift
:
+
. package ( url : "https://github.com/HeroTransitions/Hero.git" , . upToNextMajor ( from : "1.3.0" ))
+
+
+
and then specify "Hero"
as a dependency of the Target in which you wish to use Hero.
+Here’s an example PackageDescription
:
+
// swift-tools-version:4.0
+import PackageDescription
+
+let package = Package (
+ name : "MyPackage" ,
+ products : [
+ . library (
+ name : "MyPackage" ,
+ targets : [ "MyPackage" ]),
+ ],
+ dependencies : [
+ . package ( url : "https://github.com/HeroTransitions/Hero.git" , . upToNextMajor ( from : "1.3.0" ))
+ ],
+ targets : [
+ . target (
+ name : "MyPackage" ,
+ dependencies : [ "Hero" ])
+ ]
+)
+
+
Manually
+
+
+Drag the Sources folder anywhere in your project.
+
+
Documentations
+
+
Checkout the WIKI PAGES (Usage Guide) for documentations.
+
+
For more up-to-date ones, please see the header-doc. (use alt+click in Xcode)
+
+
Interactive Transition Tutorials
+
+
Interactive transitions with Hero (Part 1)
+
FAQ
+
Not able to use Hero transition even when self.hero.isEnabled
is set to true
+
+
Make sure that you have also enabled self.hero.isEnabled
on the navigation controller if you are doing a push/pop inside the navigation controller.
+
Views being covered by another matched view during the transition
+
+
Matched views use global coordinate space while unmatched views use local coordinate space by default. Local coordinate spaced views might be covered by other global coordinate spaced views. To solve this, use the useGlobalCoordinateSpace
modifier on the views being covered. Checkout Coordinate Space Wiki page for details.
+
Push animation is shown along side my custom animation
+
+
This is the default animation for navigation controller provided by Hero. To disable the push animation, set self.hero.navigationAnimationType
to .fade
or .none
on the navigation controller.
+
How do I use a different default animation when dismissing
+
+
You can use the animation type .selectBy(presenting:dismissing)
to specify a different default animation for dismiss.
+
+
For example:
+
self . hero . modalAnimationType = . selectBy ( presenting : . zoom , dismissing : . zoomOut )
+
+
Contribute
+
+
We welcome any contributions. Please read the Contribution Guide .
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.js
new file mode 100755
index 00000000..c31dc05e
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.js
@@ -0,0 +1,59 @@
+window.jazzy = {'docset': false}
+if (typeof window.dash != 'undefined') {
+ document.documentElement.className += ' dash'
+ window.jazzy.docset = true
+}
+if (navigator.userAgent.match(/xcode/i)) {
+ document.documentElement.className += ' xcode'
+ window.jazzy.docset = true
+}
+
+function toggleItem($link, $content) {
+ var animationDuration = 300;
+ $link.toggleClass('token-open');
+ $content.slideToggle(animationDuration);
+}
+
+function itemLinkToContent($link) {
+ return $link.parent().parent().next();
+}
+
+// On doc load + hash-change, open any targetted item
+function openCurrentItemIfClosed() {
+ if (window.jazzy.docset) {
+ return;
+ }
+ var $link = $(`.token[href="${location.hash}"]`);
+ $content = itemLinkToContent($link);
+ if ($content.is(':hidden')) {
+ toggleItem($link, $content);
+ }
+}
+
+$(openCurrentItemIfClosed);
+$(window).on('hashchange', openCurrentItemIfClosed);
+
+// On item link ('token') click, toggle its discussion
+$('.token').on('click', function(event) {
+ if (window.jazzy.docset) {
+ return;
+ }
+ var $link = $(this);
+ toggleItem($link, itemLinkToContent($link));
+
+ // Keeps the document from jumping to the hash.
+ var href = $link.attr('href');
+ if (history.pushState) {
+ history.pushState({}, '', href);
+ } else {
+ location.hash = href;
+ }
+ event.preventDefault();
+});
+
+// Clicks on links to the current, closed, item need to open the item
+$("a:not('.token')").on('click', function() {
+ if (location == this.href) {
+ openCurrentItemIfClosed();
+ }
+});
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.search.js b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.search.js
new file mode 100644
index 00000000..e3d1ab90
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.search.js
@@ -0,0 +1,70 @@
+$(function(){
+ var $typeahead = $('[data-typeahead]');
+ var $form = $typeahead.parents('form');
+ var searchURL = $form.attr('action');
+
+ function displayTemplate(result) {
+ return result.name;
+ }
+
+ function suggestionTemplate(result) {
+ var t = '';
+ t += '' + result.name + ' ';
+ if (result.parent_name) {
+ t += '' + result.parent_name + ' ';
+ }
+ t += '
';
+ return t;
+ }
+
+ $typeahead.one('focus', function() {
+ $form.addClass('loading');
+
+ $.getJSON(searchURL).then(function(searchData) {
+ const searchIndex = lunr(function() {
+ this.ref('url');
+ this.field('name');
+ this.field('abstract');
+ for (const [url, doc] of Object.entries(searchData)) {
+ this.add({url: url, name: doc.name, abstract: doc.abstract});
+ }
+ });
+
+ $typeahead.typeahead(
+ {
+ highlight: true,
+ minLength: 3,
+ autoselect: true
+ },
+ {
+ limit: 10,
+ display: displayTemplate,
+ templates: { suggestion: suggestionTemplate },
+ source: function(query, sync) {
+ const lcSearch = query.toLowerCase();
+ const results = searchIndex.query(function(q) {
+ q.term(lcSearch, { boost: 100 });
+ q.term(lcSearch, {
+ boost: 10,
+ wildcard: lunr.Query.wildcard.TRAILING
+ });
+ }).map(function(result) {
+ var doc = searchData[result.ref];
+ doc.url = result.ref;
+ return doc;
+ });
+ sync(results);
+ }
+ }
+ );
+ $form.removeClass('loading');
+ $typeahead.trigger('focus');
+ });
+ });
+
+ var baseURL = searchURL.slice(0, -"search.json".length);
+
+ $typeahead.on('typeahead:select', function(e, result) {
+ window.location = baseURL + result.url;
+ });
+});
diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jquery.min.js b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jquery.min.js
new file mode 100644
index 00000000..a1c07fd8
--- /dev/null
+++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jquery.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML=" ";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""," "],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hero Reference
+
+ Hero Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hero is a library for building iOS view controller transitions. It provides a declarative layer on top of the UIKit’s cumbersome transition APIs—making custom transitions an easy task for developers.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hero is similar to Keynote’s Magic Move . It checks the heroID
property on all source and destination views. Every matched view pair is then automatically transitioned from its old state to its new state.
+
+
Hero can also construct animations for unmatched views. It is easy to define these animations via the heroModifiers
property. Hero will run these animations alongside the Magic Move animations. All of these animations can be interactively controlled by user gestures.
+
+
At view controller level, Hero provides several template transitions that you can set through heroModalAnimationType
, heroNavigationAnimationType
, and heroTabBarAnimationType
. These can be used as the foundation of your custom transitions. Combine with heroID
& heroModifiers
to make your own unique transitions.
+
+
+
+
+
By default, Hero provides dynamic duration based on the Material Design Motion Guide . Duration is automatically determined by changes to distance and size—saving you the hassle, while providing consistent and delightful animations.
+
+
Hero doesn’t make any assumptions about how the view is built or structured. It won’t modify any of your views’ states other than hiding them during the animation. This makes it work with Auto Layout , programmatic layout , UICollectionView (without modifying its layout object), UITableView , UINavigationController , UITabBarController , etc…
+
Example Gallery
+
+
Checkout the Example Gallery Blog Post for a general idea of what you can achieve with Hero
+
Usage Example 1
+
+
+
View Controller 1
+
redView . hero . id = "ironMan"
+blackView . hero . id = "batMan"
+
+
View Controller 2
+
self . hero . isEnabled = true
+redView . hero . id = "ironMan"
+blackView . hero . id = "batMan"
+whiteView . hero . modifiers = [ . translate ( y : 100 )]
+
+
Usage Example 2
+
+
+
View Controller 1
+
greyView . hero . id = "skyWalker"
+
+
View Controller 2
+
self . hero . isEnabled = true
+greyView . hero . id = "skyWalker"
+
+// collectionView is the parent view of all red cells
+collectionView . hero . modifiers = [ . cascade ]
+for cell in redCells {
+ cell . hero . modifiers = [ . fade , . scale ( 0.5 )]
+}
+
+
+
You can do these in the storyboard too!
+
+
+
+
Installation
+
CocoaPods
+
+
Add the following entry to your Podfile:
+
pod 'Hero'
+
+
+
Then run pod install
.
+
+
Don’t forget to import Hero
in every file you’d like to use Hero.
+
Carthage
+
+
Add the following entry to your Cartfile
:
+
github "HeroTransitions/Hero"
+
+
+
Then run carthage update
.
+
+
If this is your first time using Carthage in the project, you’ll need to go through some additional steps as explained over at Carthage .
+
Swift Package Manager
+
+
To integrate using Apple’s Swift package manager, add the following as a dependency to your Package.swift
:
+
. package ( url : "https://github.com/HeroTransitions/Hero.git" , . upToNextMajor ( from : "1.3.0" ))
+
+
+
and then specify "Hero"
as a dependency of the Target in which you wish to use Hero.
+Here’s an example PackageDescription
:
+
// swift-tools-version:4.0
+import PackageDescription
+
+let package = Package (
+ name : "MyPackage" ,
+ products : [
+ . library (
+ name : "MyPackage" ,
+ targets : [ "MyPackage" ]),
+ ],
+ dependencies : [
+ . package ( url : "https://github.com/HeroTransitions/Hero.git" , . upToNextMajor ( from : "1.3.0" ))
+ ],
+ targets : [
+ . target (
+ name : "MyPackage" ,
+ dependencies : [ "Hero" ])
+ ]
+)
+
+
Manually
+
+
+Drag the Sources folder anywhere in your project.
+
+
Documentations
+
+
Checkout the WIKI PAGES (Usage Guide) for documentations.
+
+
For more up-to-date ones, please see the header-doc. (use alt+click in Xcode)
+
+
Interactive Transition Tutorials
+
+
Interactive transitions with Hero (Part 1)
+
FAQ
+
Not able to use Hero transition even when self.hero.isEnabled
is set to true
+
+
Make sure that you have also enabled self.hero.isEnabled
on the navigation controller if you are doing a push/pop inside the navigation controller.
+
Views being covered by another matched view during the transition
+
+
Matched views use global coordinate space while unmatched views use local coordinate space by default. Local coordinate spaced views might be covered by other global coordinate spaced views. To solve this, use the useGlobalCoordinateSpace
modifier on the views being covered. Checkout Coordinate Space Wiki page for details.
+
Push animation is shown along side my custom animation
+
+
This is the default animation for navigation controller provided by Hero. To disable the push animation, set self.hero.navigationAnimationType
to .fade
or .none
on the navigation controller.
+
How do I use a different default animation when dismissing
+
+
You can use the animation type .selectBy(presenting:dismissing)
to specify a different default animation for dismiss.
+
+
For example:
+
self . hero . modalAnimationType = . selectBy ( presenting : . zoom , dismissing : . zoomOut )
+
+
Contribute
+
+
We welcome any contributions. Please read the Contribution Guide .
+
+
+
+
+
+
+
+
+
+
+