21 Commits

Author SHA1 Message Date
Ramotion cb471b2295 Update README.md 2020-04-06 10:00:09 +03:00
igor.k 0ae093ea75 support swift package manager 2019-11-12 03:13:39 +03:00
Ramotion 7bec499be2 Update README.md 2019-10-12 21:08:34 +03:00
Alex K 74f93c36d5 bump version 2019-04-03 16:04:09 +03:00
Alex K 4deca2d95b converted to swift 5 2019-04-03 16:02:57 +03:00
Alex K e15d420969 Merge branch 'master' of github.com:Ramotion/preview-transition 2019-04-03 15:58:22 +03:00
Alex K e08f300ebe no message 2019-04-03 15:58:09 +03:00
Ramotion 643469a4b4 Update README.md 2018-12-29 16:53:45 +03:00
Ramotion 2f8f77fb5c Update README.md 2018-12-10 12:13:28 +03:00
Alex K 2f8eb0632e update deployment target 2018-09-17 10:28:45 +03:00
Alex K f494d7f185 update podspec 2018-09-17 09:49:34 +03:00
Alex K 4f8b51b5bc convert to swift 4.2 2018-09-17 09:44:19 +03:00
Ramotion 79537b624f Update README.md 2018-06-29 14:22:43 +03:00
Ramotion 3271e28008 Update README.md 2018-06-26 11:17:19 +03:00
Ramotion 01fdcfd333 Update README.md 2018-05-29 12:01:14 +03:00
Alex K c0c3d33058 update demo project 2018-05-18 17:15:50 +03:00
Ramotion 9bae1297b2 Update README.md 2018-04-27 12:17:33 +03:00
Ramotion 13d845634a Add files via upload 2018-04-27 02:16:25 -07:00
Ramotion 226b67b654 Update README.md 2018-04-23 09:32:49 +03:00
Ramotion d3f4abfee8 Update README.md 2018-03-12 11:03:27 +03:00
Alex Mikhnev 3edf6223f7 Update README.md 2018-02-21 14:52:26 +03:00
15 changed files with 139 additions and 79 deletions
+1 -1
View File
@@ -1 +1 @@
4.0
4.2
+43
View File
@@ -0,0 +1,43 @@
// swift-tools-version:5.1
//
// Package.swift
//
// Copyright (c) Ramotion Inc. (https://www.ramotion.com/)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
import PackageDescription
let package = Package(
name: "PreviewTransition",
platforms: [
.iOS(.v9)
],
products: [
.library(name: "PreviewTransition",
targets: ["PreviewTransition"]),
],
targets: [
.target(name: "PreviewTransition",
path: "PreviewTransition")
],
swiftLanguageVersions: [.v5]
)
+1 -1
View File
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'PreviewTransition'
s.version = '3.0.1'
s.version = '4.1.0'
s.summary = 'Transition animation'
s.license = 'MIT'
s.homepage = 'https://github.com/Ramotion/preview-transition'
@@ -85,7 +85,7 @@ extension PTDetailViewController {
imageView.image = image
imageView.frame = view.bounds
imageView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
imageView.contentMode = UIViewContentMode.scaleAspectFill
imageView.contentMode = UIView.ContentMode.scaleAspectFill
view.insertSubview(imageView, at: 0)
return imageView
@@ -97,7 +97,7 @@ extension PTDetailViewController {
navBar.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(navBar)
for attributes: NSLayoutAttribute in [.left, .right, .top] {
for attributes: NSLayoutConstraint.Attribute in [.left, .right, .top] {
(view, navBar) >>>- {
$0.attribute = attributes
return
@@ -98,7 +98,7 @@ open class ParallaxCell: UITableViewCell {
- returns: an initialized UITableViewCell object or nil if the object could not be created.
*/
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
commonInit()
}
@@ -118,7 +118,7 @@ extension ParallaxCell {
// add constraints
if let bgSuperView = backgroundImageView.superview {
for attribute: NSLayoutAttribute in [.leading, .trailing] {
for attribute: NSLayoutConstraint.Attribute in [.leading, .trailing] {
(bgSuperView, backgroundImageView) >>>- {
$0.attribute = attribute
return
@@ -141,7 +141,7 @@ extension ParallaxCell {
// create title label
let titleLabel = createTitleLable()
for attribute: NSLayoutAttribute in [.left, .right] {
for attribute: NSLayoutConstraint.Attribute in [.left, .right] {
(contentView, titleLabel) >>>- {
$0.attribute = attribute
return
@@ -179,7 +179,7 @@ public extension ParallaxCell {
- parameter image: The image object which set to the backgroundImageView
- parameter title: The text to be displayed in the Cell
*/
public func setImage(_ image: UIImage, title: String) {
func setImage(_ image: UIImage, title: String) {
bgImage?.image = image
parallaxTitle?.text = title
}
@@ -219,7 +219,7 @@ extension ParallaxCell {
let cellY = frame.origin.y - offsetY + frame.size.height / 2.0 + offsetY - tableView.frame.size.height / 2.0
let cellFrame = CGRect(x: 0, y: cellY, width: tableView.frame.size.width, height: tableView.frame.size.height)
frame = cellFrame
superview.sendSubview(toBack: self)
superview.sendSubviewToBack(self)
// animation
bgImageHeight.constant = cellFrame.height
@@ -231,7 +231,7 @@ extension ParallaxCell {
func closeCell(_ duration: Double, tableView _: UITableView, completion: @escaping () -> Void) {
bgImageY?.constant = closedBgImageYConstant
bgImageHeight?.constant = closedHeight
UIView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: damping, initialSpringVelocity: 0, options: UIViewAnimationOptions(), animations: { [weak self] () in
UIView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: damping, initialSpringVelocity: 0, options: UIView.AnimationOptions(), animations: { [weak self] () in
guard let `self` = self else { return }
self.bgImage?.superview?.layoutIfNeeded()
self.center = CGPoint(x: self.center.x, y: self.closedYPosition)
@@ -261,8 +261,8 @@ extension ParallaxCell {
center.y = closedYPosition - dy
}
superview?.bringSubview(toFront: self)
UIView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: damping, initialSpringVelocity: 0, options: UIViewAnimationOptions(), animations: { () -> Void in
superview?.bringSubviewToFront(self)
UIView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: damping, initialSpringVelocity: 0, options: UIView.AnimationOptions(), animations: { () -> Void in
self.center.y = self.center.y + dy
}, completion: nil)
}
@@ -278,7 +278,7 @@ extension ParallaxCell {
fileprivate func moveToCenter(_ duration: Double, offset: CGFloat) {
bgImageY?.constant = 0
UIView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: 0.78, initialSpringVelocity: 0, options: UIViewAnimationOptions(), animations: { () -> Void in
UIView.animate(withDuration: duration, delay: 0, usingSpringWithDamping: 0.78, initialSpringVelocity: 0, options: UIView.AnimationOptions(), animations: { () -> Void in
self.frame.origin.y = offset
self.bgImage?.superview?.layoutIfNeeded()
}, completion: nil)
@@ -320,7 +320,7 @@ extension ParallaxCell {
delay: 0,
usingSpringWithDamping: damping * 2.0,
initialSpringVelocity: 0,
options: UIViewAnimationOptions(),
options: UIView.AnimationOptions(),
animations: { () -> Void in
foregroundView.superview?.layoutIfNeeded()
}, completion: nil)
@@ -338,7 +338,7 @@ extension ParallaxCell {
container.backgroundColor = .clear
container.clipsToBounds = true
contentView.addSubview(container)
for attribute: NSLayoutAttribute in [.left, .right, .top, .bottom] {
for attribute: NSLayoutConstraint.Attribute in [.left, .right, .top, .bottom] {
(contentView, container) >>>- {
$0.attribute = attribute
return
@@ -358,11 +358,11 @@ extension ParallaxCell {
label.backgroundColor = .clear
label.translatesAutoresizingMaskIntoConstraints = false
label.textAlignment = .center
if case let font as UIFont = UINavigationBar.appearance().titleTextAttributes?[NSAttributedStringKey.font] {
if case let font as UIFont = UINavigationBar.appearance().titleTextAttributes?[NSAttributedString.Key.font] {
label.font = font
}
if case let textColor as UIColor = UINavigationBar.appearance().titleTextAttributes?[NSAttributedStringKey.foregroundColor] {
if case let textColor as UIColor = UINavigationBar.appearance().titleTextAttributes?[NSAttributedString.Key.foregroundColor] {
label.textColor = textColor
}
contentView.addSubview(label)
@@ -387,7 +387,7 @@ extension ParallaxCell {
contentView.insertSubview(foregroundView, aboveSubview: bgImage)
// add constraints
for attribute: NSLayoutAttribute in [.left, .right, .top] {
for attribute: NSLayoutConstraint.Attribute in [.left, .right, .top] {
(contentView, foregroundView) >>>- {
$0.attribute = attribute
return
@@ -403,13 +403,13 @@ extension ParallaxCell {
}
// return bottom constraint
fileprivate func createSeparator(_ color: UIColor, height: CGFloat, verticalAttribure: NSLayoutAttribute, verticalConstant: CGFloat) -> UIView {
fileprivate func createSeparator(_ color: UIColor, height: CGFloat, verticalAttribure: NSLayoutConstraint.Attribute, verticalConstant: CGFloat) -> UIView {
let separator = UIView(frame: CGRect.zero)
separator.backgroundColor = color
separator.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(separator)
for attribute: NSLayoutAttribute in [.leading, .trailing] {
for attribute: NSLayoutConstraint.Attribute in [.leading, .trailing] {
(contentView, separator) >>>- {
$0.attribute = attribute
return
@@ -9,11 +9,11 @@
import UIKit
struct ConstraintInfo {
var attribute: NSLayoutAttribute = .left
var secondAttribute: NSLayoutAttribute = .notAnAttribute
var attribute: NSLayoutConstraint.Attribute = .left
var secondAttribute: NSLayoutConstraint.Attribute = .notAnAttribute
var constant: CGFloat = 0
var identifier: String?
var relation: NSLayoutRelation = .equal
var relation: NSLayoutConstraint.Relation = .equal
}
precedencegroup constOp {
@@ -42,7 +42,7 @@ extension Moving where Self: UIView {
delay: 0,
usingSpringWithDamping: 0.78,
initialSpringVelocity: 0,
options: UIViewAnimationOptions(),
options: UIView.AnimationOptions(),
animations: { [weak self] () -> Void in
guard let `self` = self else { return }
var toYPosition = self.defaultYPosition
@@ -78,7 +78,7 @@ internal class MovingView: UIView {
delay: 0,
usingSpringWithDamping: 0.78,
initialSpringVelocity: 0,
options: UIViewAnimationOptions(),
options: UIView.AnimationOptions(),
animations: { () -> Void in
self.frame.origin.y = yPosition
}, completion: completion)
@@ -51,7 +51,7 @@ public extension PTTableViewController {
- parameter viewController: The view controller to push onto the stack.
*/
public func pushViewController(_ viewController: PTDetailViewController) {
func pushViewController(_ viewController: PTDetailViewController) {
guard let currentCell = currentCell,
let navigationController = self.navigationController else {
@@ -62,7 +62,7 @@ public extension PTTableViewController {
let nextIndex = IndexPath(row: (currentIndex as NSIndexPath).row + 1, section: (currentIndex as NSIndexPath).section)
if case let nextCell as ParallaxCell = tableView.cellForRow(at: nextIndex) {
nextCell.showTopSeparator()
nextCell.superview?.bringSubview(toFront: nextCell)
nextCell.superview?.bringSubviewToFront(nextCell)
}
}
@@ -94,7 +94,7 @@ extension PTTableViewController {
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = .never
} else {
tableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0)
tableView.contentInset = UIEdgeInsets.init(top: -64, left: 0, bottom: 0, right: 0)
}
}
@@ -15,11 +15,11 @@ extension UIView {
animation.duration = duration
animation.toValue = to
animation.fromValue = from
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut)
animation.beginTime = CACurrentMediaTime() + delay
if remove == false {
animation.isRemovedOnCompletion = remove
animation.fillMode = kCAFillModeForwards
animation.fillMode = CAMediaTimingFillMode.forwards
}
return animation
}
@@ -280,7 +280,6 @@
84204DF51CB2869E001FC263 /* Sources */,
84204DF61CB2869E001FC263 /* Frameworks */,
84204DF71CB2869E001FC263 /* Resources */,
8485264F1CD39C880052BEAD /* image enum gen */,
8499D8C31D006020004B5B37 /* Embed Frameworks */,
);
buildRules = (
@@ -318,24 +317,24 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0730;
LastUpgradeCheck = 0900;
LastUpgradeCheck = 1020;
ORGANIZATIONNAME = "Alex K.";
TargetAttributes = {
84204DF81CB2869E001FC263 = {
CreatedOnToolsVersion = 7.3;
DevelopmentTeam = 34MUF9YXTA;
LastSwiftMigration = 0900;
LastSwiftMigration = 1020;
};
8499D8B61D006020004B5B37 = {
CreatedOnToolsVersion = 7.3.1;
DevelopmentTeam = LEAZS7L33U;
LastSwiftMigration = 0900;
LastSwiftMigration = 1020;
};
};
};
buildConfigurationList = 84204DF41CB2869E001FC263 /* Build configuration list for PBXProject "PreviewTransitionDemo" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
@@ -372,23 +371,6 @@
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
8485264F1CD39C880052BEAD /* image enum gen */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "image enum gen";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "if which swiftgen >/dev/null; then\nswiftgen images \"$PROJECT_DIR/PreviewTransitionDemo/Assets.xcassets\" --output \"$PROJECT_DIR/Constants/Images.swift\"\nelse\necho \"warning: SwiftGen not installed, download it from https://github.com/AliSoftware/SwiftGen\"\nfi";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
84204DF51CB2869E001FC263 /* Sources */ = {
isa = PBXSourcesBuildPhase;
@@ -457,6 +439,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -466,12 +449,14 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
@@ -498,7 +483,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -510,6 +495,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -519,12 +505,14 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
@@ -545,7 +533,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
@@ -567,8 +555,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.dev;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 5.0;
};
name = Debug;
};
@@ -586,8 +573,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.dev;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 5.0;
};
name = Release;
};
@@ -608,8 +594,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.PreivewTransition;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = NO;
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
@@ -633,8 +618,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.PreivewTransition;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = NO;
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0900"
LastUpgradeVersion = "1020"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -26,7 +26,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
@@ -37,7 +36,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
@@ -28,8 +28,8 @@ extension AppDelegate {
if let font = UIFont(name: "Avenir-medium", size: 18) {
UINavigationBar.appearance().titleTextAttributes = [
NSAttributedStringKey.foregroundColor: UIColor.white,
NSAttributedStringKey.font: font,
NSAttributedString.Key.foregroundColor: UIColor.white,
NSAttributedString.Key.font: font,
]
}
}
+39 -12
View File
@@ -1,12 +1,34 @@
[![header](./header.png)](https://ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=preview-transition-logo)
![Animation](./preview.gif)
# Preview-transition
<a href="https://www.ramotion.com/agency/app-development/?utm_source=gthb&utm_medium=repo&utm_campaign=preview-transition"><img src="https://github.com/Ramotion/folding-cell/blob/master/header.png"></a>
<a href="https://github.com/Ramotion/fpreview-transition">
<img align="left" src="https://github.com/Ramotion/preview-transition/blob/master/preview-transition.gif" width="480" height="360" /></a>
<p><h1 align="left">PREVIEW TRANSITION</h1></p>
<h4>Preview Transition is a simple preview gallery UI controller with animated tranisitions</h4>
___
<p><h6>We specialize in the designing and coding of custom UI for Mobile Apps and Websites.</h6>
<a href="https://www.ramotion.com/agency/app-development/?utm_source=gthb&utm_medium=repo&utm_campaign=preview-transition">
<img src="https://github.com/ramotion/gliding-collection/raw/master/contact_our_team@2x.png" width="187" height="34"></a>
</p>
<p><h6>Stay tuned for the latest updates:</h6>
<a href="https://goo.gl/rPFpid" >
<img src="https://i.imgur.com/ziSqeSo.png/" width="156" height="28"></a></p>
</br>
[![Twitter](https://img.shields.io/badge/Twitter-@Ramotion-blue.svg?style=flat)](http://twitter.com/Ramotion)
[![Travis](https://img.shields.io/travis/Ramotion/preview-transition.svg)](https://travis-ci.org/Ramotion/preview-transition.svg?branch=master)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Ramotion/preview-transition)
[![CocoaPods](https://img.shields.io/cocoapods/p/PreviewTransition.svg)](https://cocoapods.org/pods/PreviewTransition)
[![CocoaPods](https://img.shields.io/cocoapods/v/PreviewTransition.svg)](http://cocoapods.org/pods/PreviewTransition)
[![codebeat badge](https://codebeat.co/badges/b99f71fe-b7e7-4a08-94bd-d98307d176ea)](https://codebeat.co/projects/github-com-ramotion-preview-transition)
[![Donate](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://paypal.me/Ramotion)
## About
@@ -16,11 +38,9 @@ We specialize in the designing and coding of custom UI for Mobile Apps and Websi
**Looking for developers for your project?**<br>
This project is maintained by Ramotion, Inc. We specialize in the designing and coding of custom UI for Mobile Apps and Websites.
<a href="https://ramotion.com/?utm_source=gthb&utm_medium=special&utm_campaign=preview-transition-contact-us/#Get_in_Touch">
<a href="https://www.ramotion.com/agency/app-development/?utm_source=gthb&utm_medium=repo&utm_campaign=preview-transition">
<img src="https://github.com/ramotion/gliding-collection/raw/master/contact_our_team@2x.png" width="187" height="34"></a> <br>
The [iPhone mockup](https://store.ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=preview-transition) available [here](https://store.ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=preview-transition).
## Requirements
- iOS 9.0+
@@ -138,16 +158,23 @@ if let font = UIFont(name: <Font name> , size: 18) {
]
}
```
# Get the Showroom App for iOS to give it a try
## 📄 License
Preview Transition is released under the MIT license.
See [LICENSE](./LICENSE) for details.
This library is a part of a <a href="https://github.com/Ramotion/swift-ui-animation-components-and-libraries"><b>selection of our best UI open-source projects.</b></a>
If you use the open-source library in your project, please make sure to credit and backlink to https://www.ramotion.com/
## 📱 Get the Showroom App for iOS to give it a try
Try this UI component and more like this in our iOS app. Contact us if interested.
<a href="https://itunes.apple.com/app/apple-store/id1182360240?pt=550053&ct=preview-transition&mt=8" >
<img src="https://github.com/ramotion/gliding-collection/raw/master/app_store@2x.png" width="117" height="34"></a>
<a href="https://ramotion.com/?utm_source=gthb&utm_medium=special&utm_campaign=preview-transition-contact-us/#Get_in_Touch">
<a href="https://www.ramotion.com/agency/app-development/?utm_source=gthb&utm_medium=repo&utm_campaign=preview-transition">
<img src="https://github.com/ramotion/gliding-collection/raw/master/contact_our_team@2x.png" width="187" height="34"></a>
<br>
<br>
Follow us for the latest updates<br>
[![Twitter URL](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=https://github.com/ramotion/preview-transition)
[![Twitter Follow](https://img.shields.io/twitter/follow/ramotion.svg?style=social)](https://twitter.com/ramotion)
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 MiB