Compare commits

..
38 Commits
Author SHA1 Message Date
Alex K 5afa9a0fa9 code improvements 2019-02-22 09:33:36 +03:00
Alex K 851de6ba7d clean up tests 2019-02-15 09:55:32 +03:00
Alex K 0ab9b0e6a2 Cleaning tests 2019-02-08 11:17:18 +03:00
Alex K ed1785d514 test case refactor 2019-02-01 12:31:05 +03:00
Alex K d310932e45 fileprivate to private 2019-01-25 09:59:22 +03:00
Alex K 8e1d1040df clean tests 2019-01-18 09:56:15 +03:00
Alex K f5847da4fb Merge branch 'master' of github.com:Ramotion/folding-cell 2019-01-11 10:26:34 +03:00
Alex K faf95986ac add test method testRotateX 2019-01-11 10:26:03 +03:00
Ramotion 71708c994e Update README.md 2019-01-04 12:31:02 +03:00
Ramotion 0b403320fa Add files via upload 2018-12-27 07:45:31 -08:00
Ramotion 5d041c1bac Update README.md 2018-12-27 18:05:24 +03:00
Ramotion 8e56e7cd18 Update README.md 2018-12-27 17:03:37 +03:00
Ramotion a056df2e23 Update Header 2018-12-27 06:01:04 -08:00
Ramotion 6bb7bc1051 Update README.md 2018-12-27 16:57:08 +03:00
Ramotion 68c1c15831 Update README.md 2018-12-21 12:50:32 +03:00
Ramotion 2ab14733a5 Update README.md 2018-12-20 14:15:02 +03:00
Alex K 2900fcb254 Merge branch 'master' of github.com:Ramotion/folding-cell 2018-12-17 10:30:40 +03:00
Alex K 5f11f00043 add test 2018-12-17 10:30:10 +03:00
Ramotion 7f0951ca09 Update README.md 2018-12-10 11:57:24 +03:00
Ramotion 08908652c1 Update README.md 2018-12-10 10:16:11 +03:00
Alex K 3981f6930b add test file for RotationView class 2018-12-04 10:07:14 +03:00
Alex K c6c6dd6254 change deployment target 2018-11-27 10:46:46 +03:00
Alex K f6121df6eb add test scheme 2018-11-20 09:58:45 +03:00
Alex K 86ced39c50 update travis 2018-11-20 09:50:35 +03:00
Alex K 7648567b0a travis 2018-11-20 09:43:08 +03:00
Alex K f325b3c7c0 update travis yml 2018-11-13 10:27:05 +03:00
Alex K 50e0ebbf97 improve test unfold method 2018-11-06 10:25:46 +03:00
Alex K 3d7e47951f update podspec 2018-10-30 10:13:52 +03:00
Alex K 5d31dfa9bf Merge branch 'master' of github.com:Ramotion/folding-cell 2018-10-23 09:25:56 +03:00
Alex K 2285009361 small improvements 2018-10-23 09:24:41 +03:00
Juri Vasylenko 42ef7ce2f2 Update README.md 2018-10-16 19:35:02 +03:00
Alex K f6d649a79c update podspec 2018-10-16 09:16:56 +03:00
Alex K 2bc6905e3a make openAnimation and closeAnimation functions private 2018-10-09 09:23:41 +03:00
Alex K f279359721 update swift-version file 2018-10-01 11:29:22 +03:00
Alex K 859a868aa4 add unfold test 2018-09-24 10:01:20 +03:00
Alex K c9c516dc19 update podspec 2018-09-17 10:34:01 +03:00
Alex K 3335c26e78 converted to swift 4.2 2018-09-17 10:32:37 +03:00
Alex K 27d2bc7a62 update podspec 2018-09-17 10:30:41 +03:00
12 changed files with 145 additions and 76 deletions
+1 -1
View File
@@ -1 +1 @@
4.0
4.2
+3 -3
View File
@@ -1,11 +1,11 @@
osx_image: xcode9.2
osx_image: xcode10.1
language: objective-c
xcode_project: FoldingCell/FoldingCell.xcodeproj
xcode_scheme: FoldingCell
xcode_sdk: iphonesimulator11.2
xcode_sdk: iphonesimulator12.1
# SWIFT_VERSION: 4.0
# SWIFT_VERSION: 4.2
# whitelist
branches:
+1 -1
View File
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'FoldingCell'
s.version = '3.1.4'
s.version = '4.0.2'
s.summary = 'UITableViewCell with folding animation.'
s.homepage = 'https://github.com/Ramotion/folding-cell'
s.license = 'MIT'
@@ -28,7 +28,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplicationLaunchOptionsKey: Any]? = nil) -> Bool {
func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
return true
}
}
@@ -42,7 +42,7 @@ class MainTableViewController: UITableViewController {
private func setup() {
cellHeights = Array(repeating: Const.closeCellHeight, count: Const.rowsCount)
tableView.estimatedRowHeight = Const.closeCellHeight
tableView.rowHeight = UITableViewAutomaticDimension
tableView.rowHeight = UITableView.automaticDimension
tableView.backgroundColor = UIColor(patternImage: #imageLiteral(resourceName: "background"))
if #available(iOS 10.0, *) {
tableView.refreshControl = UIRefreshControl()
@@ -8,6 +8,7 @@
/* Begin PBXBuildFile section */
5A0E1C3021414940006A0374 /* FoldingCellDemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A0E1C2F21414940006A0374 /* FoldingCellDemoTests.swift */; };
5A1225D821B65E8E005BBB26 /* RotationViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A1225D721B65E8E005BBB26 /* RotationViewTests.swift */; };
8499D8881D0054A8004B5B37 /* FoldingCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 8499D8871D0054A8004B5B37 /* FoldingCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
9D57F31F1EDC7A6F0004599F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D57F31E1EDC7A6F0004599F /* AppDelegate.swift */; };
9D57F3241EDC7A6F0004599F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9D57F3221EDC7A6F0004599F /* Main.storyboard */; };
@@ -81,6 +82,7 @@
5A0E1C2D21414940006A0374 /* FoldingCellDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FoldingCellDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
5A0E1C2F21414940006A0374 /* FoldingCellDemoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoldingCellDemoTests.swift; sourceTree = "<group>"; };
5A0E1C3121414940006A0374 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5A1225D721B65E8E005BBB26 /* RotationViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RotationViewTests.swift; sourceTree = "<group>"; };
8499D8851D0054A8004B5B37 /* FoldingCell.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FoldingCell.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8499D8871D0054A8004B5B37 /* FoldingCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FoldingCell.h; sourceTree = "<group>"; };
8499D8891D0054A8004B5B37 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -144,6 +146,7 @@
children = (
5A0E1C2F21414940006A0374 /* FoldingCellDemoTests.swift */,
5A0E1C3121414940006A0374 /* Info.plist */,
5A1225D721B65E8E005BBB26 /* RotationViewTests.swift */,
);
path = FoldingCellDemoTests;
sourceTree = "<group>";
@@ -318,18 +321,19 @@
TargetAttributes = {
5A0E1C2C21414940006A0374 = {
CreatedOnToolsVersion = 9.4;
LastSwiftMigration = 1000;
ProvisioningStyle = Automatic;
TestTargetID = 9D57F31B1EDC7A6F0004599F;
};
8499D8841D0054A8004B5B37 = {
CreatedOnToolsVersion = 7.3.1;
DevelopmentTeam = LEAZS7L33U;
LastSwiftMigration = 0830;
LastSwiftMigration = 1000;
};
9D57F31B1EDC7A6F0004599F = {
CreatedOnToolsVersion = 8.3.2;
DevelopmentTeam = 34MUF9YXTA;
LastSwiftMigration = 0920;
LastSwiftMigration = 1000;
ProvisioningStyle = Automatic;
};
9DAA51531EDDBAD700DFC539 = {
@@ -402,6 +406,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5A1225D821B65E8E005BBB26 /* RotationViewTests.swift in Sources */,
5A0E1C3021414940006A0374 /* FoldingCellDemoTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -508,7 +513,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.FoldingCellDemoTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FoldingCell-Demo.app/FoldingCell-Demo";
};
@@ -531,7 +536,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.FoldingCellDemoTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FoldingCell-Demo.app/FoldingCell-Demo";
};
@@ -583,7 +588,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.4;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -631,7 +636,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.4;
IPHONEOS_DEPLOYMENT_TARGET = 12.1;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
@@ -660,7 +665,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
@@ -687,7 +692,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.FoldingCell;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
@@ -712,8 +717,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
};
name = Debug;
};
@@ -734,8 +738,7 @@
PRODUCT_BUNDLE_IDENTIFIER = "ramotion.com.FoldingCell-Demo";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
};
name = Release;
};
@@ -28,7 +28,26 @@
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5A0E1C2C21414940006A0374"
BuildableName = "FoldingCellDemoTests.xctest"
BlueprintName = "FoldingCellDemoTests"
ReferencedContainer = "container:FoldingCell.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8499D8841D0054A8004B5B37"
BuildableName = "FoldingCell.framework"
BlueprintName = "FoldingCell"
ReferencedContainer = "container:FoldingCell.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
+24 -16
View File
@@ -93,7 +93,7 @@ open class FoldingCell: UITableViewCell {
foregroundView.layer.transform = foregroundView.transform3d()
createAnimationView()
contentView.bringSubview(toFront: foregroundView)
contentView.bringSubviewToFront(foregroundView)
}
func createAnimationItemView() -> [RotatedView] {
@@ -121,18 +121,16 @@ open class FoldingCell: UITableViewCell {
if animationType == .open {
animationView?.subviews
.lazy
.compactMap { $0 as? RotatedView }
.forEach { $0.alpha = 0 }
} else {
animationView?.subviews
.lazy
.compactMap { $0 as? RotatedView }
.forEach {
if animationType == .open {
$0.alpha = 0
} else {
$0.alpha = 1
$0.backView?.alpha = 0
}
$0.alpha = animationType == .open ? 0 : 1
if animationType != .open { $0.backView?.alpha = 0 }
}
}
}
@@ -298,7 +296,7 @@ open class FoldingCell: UITableViewCell {
return durations
}
public func openAnimation(_ completion: (() -> Void)?) {
func openAnimation(_ completion: (() -> Void)?) {
isUnfolded = true
removeImageItemsFromAnimationView()
addImageItemsToAnimationView()
@@ -309,7 +307,7 @@ open class FoldingCell: UITableViewCell {
let durations = durationSequence(.open)
var delay: TimeInterval = 0
var timing = kCAMediaTimingFunctionEaseIn
var timing = convertFromCAMediaTimingFunctionName(CAMediaTimingFunctionName.easeIn)
var from: CGFloat = 0.0
var to: CGFloat = -CGFloat.pi / 2
var hidden = true
@@ -326,7 +324,7 @@ open class FoldingCell: UITableViewCell {
from = from == 0.0 ? CGFloat.pi / 2 : 0.0
to = to == 0.0 ? -CGFloat.pi / 2 : 0.0
timing = timing == kCAMediaTimingFunctionEaseIn ? kCAMediaTimingFunctionEaseOut : kCAMediaTimingFunctionEaseIn
timing = timing == convertFromCAMediaTimingFunctionName(CAMediaTimingFunctionName.easeIn) ? convertFromCAMediaTimingFunctionName(CAMediaTimingFunctionName.easeOut) : convertFromCAMediaTimingFunctionName(CAMediaTimingFunctionName.easeIn)
hidden = !hidden
delay += durations[index]
}
@@ -345,7 +343,7 @@ open class FoldingCell: UITableViewCell {
}
}
public func closeAnimation(_ completion: (() -> Void)?) {
func closeAnimation(_ completion: (() -> Void)?) {
isUnfolded = false
removeImageItemsFromAnimationView()
addImageItemsToAnimationView()
@@ -360,7 +358,7 @@ open class FoldingCell: UITableViewCell {
var durations: [TimeInterval] = durationSequence(.close).reversed()
var delay: TimeInterval = 0
var timing = kCAMediaTimingFunctionEaseIn
var timing = convertFromCAMediaTimingFunctionName(CAMediaTimingFunctionName.easeIn)
var from: CGFloat = 0.0
var to: CGFloat = CGFloat.pi / 2
var hidden = true
@@ -376,7 +374,7 @@ open class FoldingCell: UITableViewCell {
to = to == 0.0 ? CGFloat.pi / 2 : 0.0
from = from == 0.0 ? -CGFloat.pi / 2 : 0.0
timing = timing == kCAMediaTimingFunctionEaseIn ? kCAMediaTimingFunctionEaseOut : kCAMediaTimingFunctionEaseIn
timing = timing == convertFromCAMediaTimingFunctionName(CAMediaTimingFunctionName.easeIn) ? convertFromCAMediaTimingFunctionName(CAMediaTimingFunctionName.easeOut) : convertFromCAMediaTimingFunctionName(CAMediaTimingFunctionName.easeIn)
hidden = !hidden
delay += durations[index]
}
@@ -402,7 +400,7 @@ open class FoldingCell: UITableViewCell {
open class RotatedView: UIView {
fileprivate enum Const {
private enum Const {
static let rotationX = "rotation.x"
static let transformRotationX = "transform.rotation.x"
}
@@ -454,12 +452,12 @@ extension RotatedView: CAAnimationDelegate {
func foldingAnimation(_ timing: String, from: CGFloat, to: CGFloat, duration: TimeInterval, delay: TimeInterval, hidden: Bool) {
let rotateAnimation = CABasicAnimation(keyPath: Const.transformRotationX)
rotateAnimation.timingFunction = CAMediaTimingFunction(name: timing)
rotateAnimation.timingFunction = CAMediaTimingFunction(name: convertToCAMediaTimingFunctionName(timing))
rotateAnimation.fromValue = from
rotateAnimation.toValue = to
rotateAnimation.duration = duration
rotateAnimation.delegate = self
rotateAnimation.fillMode = kCAFillModeForwards
rotateAnimation.fillMode = CAMediaTimingFillMode.forwards
rotateAnimation.isRemovedOnCompletion = false
rotateAnimation.beginTime = CACurrentMediaTime() + delay
@@ -499,3 +497,13 @@ private extension UIView {
return image
}
}
// Helper function inserted by Swift 4.2 migrator.
fileprivate func convertFromCAMediaTimingFunctionName(_ input: CAMediaTimingFunctionName) -> String {
return input.rawValue
}
// Helper function inserted by Swift 4.2 migrator.
fileprivate func convertToCAMediaTimingFunctionName(_ input: String) -> CAMediaTimingFunctionName {
return CAMediaTimingFunctionName(rawValue: input)
}
@@ -1,11 +1,3 @@
//
// FoldingCellDemoTests.swift
// FoldingCellDemoTests
//
// Created by Alex K on 06/09/2018.
// Copyright © 2018 Alex K. All rights reserved.
//
import XCTest
import UIKit
@testable import FoldingCell
@@ -21,15 +13,18 @@ class FoldingCellDemoTests: XCTestCase {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "MainTableViewController") as! MainTableViewController
_ = vc.view
foldingCell = vc.tableView.dequeueReusableCell(withIdentifier: "FoldingCell", for: IndexPath(row: 0, section: 0)) as! FoldingCell
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
foldingCell = vc.tableView.dequeueReusableCell(withIdentifier: "FoldingCell", for: IndexPath(row: 0, section: 0)) as? FoldingCell
}
func testCreateFoldingCell() {
XCTAssertNotNil(foldingCell)
}
func testUnfold() {
XCTAssertEqual(foldingCell.isUnfolded, false)
foldingCell.unfold(true)
XCTAssertEqual(foldingCell.isUnfolded, true)
foldingCell.unfold(false)
XCTAssertEqual(foldingCell.isUnfolded, false)
}
}
@@ -0,0 +1,37 @@
import XCTest
import UIKit
@testable import FoldingCell
class RotationViewTests: XCTestCase {
var rotationView: RotatedView!
override func setUp() {
rotationView = RotatedView()
}
func testCreateRotationView() {
XCTAssertNotNil(rotationView)
}
func testAddBackView() {
XCTAssertNil(rotationView.backView)
let color = UIColor.red
rotationView.addBackView(100, color: color)
XCTAssertNotNil(rotationView.backView)
XCTAssertEqual(rotationView.backView?.backgroundColor, color)
}
func testRotateX() {
let key = "layer.transform.rotation.x"
let startX = (rotationView.value(forKeyPath: key) as? NSNumber)?.floatValue
XCTAssertEqual(startX, 0)
let angel: CGFloat = 0.5
rotationView.rotatedX(angel)
let x = (rotationView.value(forKeyPath: key) as? NSNumber)?.floatValue
XCTAssertEqual(x, Float(angel))
}
}
+34 -27
View File
@@ -1,8 +1,28 @@
![header](./header.png)
<img src="https://github.com/Ramotion/folding-cell/blob/master/Screenshots/foldingCell.gif" width="600" height="450" /></a>
<br><br/>
<img src="https://github.com/Ramotion/folding-cell/blob/master/header.png">
<a href="https://github.com/Ramotion/folding-cell">
<img align="left" src="https://github.com/Ramotion/folding-cell/blob/master/Screenshots/foldingCell.gif" width="480" height="360" /></a>
<p><h1 align="left">FOLDING CELL</h1></p>
<h4>Expanding content cell with animation inspired by folding paper card material design.</h4>
___
<p><h6>We specialize in the designing and coding of custom UI for Mobile Apps and Websites.</h6>
<a href="https://dev.ramotion.com?utm_source=gthb&utm_medium=repo&utm_campaign=folding-cell">
<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>
<h6><a href="https://store.ramotion.com/product/iphone-x-clay-mockups?utm_source=gthb&utm_medium=special&utm_campaign=folding-cell#demo">Get Free Mockup For your project →</a></h6>
</br>
# FoldingCell
[![CocoaPods](https://img.shields.io/cocoapods/p/FoldingCell.svg)](https://cocoapods.org/pods/FoldingCell)
[![CocoaPods](https://img.shields.io/cocoapods/v/FoldingCell.svg)](http://cocoapods.org/pods/FoldingCell)
[![Twitter](https://img.shields.io/badge/Twitter-@Ramotion-blue.svg?style=flat)](http://twitter.com/Ramotion)
@@ -13,19 +33,6 @@
[![Analytics](https://ga-beacon.appspot.com/UA-84973210-1/ramotion/folding-cell)](https://github.com/igrigorik/ga-beacon)
[![Donate](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://paypal.me/Ramotion)
# Check this library on other platforms:
<a href="https://github.com/Ramotion/folding-cell-android">
<img src="https://github.com/ramotion/navigation-stack/raw/master/Android_Java@2x.png" width="178" height="81"></a>
**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="mailto:alex.a@ramotion.com?subject=Project%20inquiry%20from%20Github">
<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/product/iphone-x-clay-mockups?utm_source=gthb&utm_medium=special&utm_campaign=folding-cell) available [here](https://store.ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=folding-cell).
## Requirements
- iOS 8.0+
@@ -42,7 +49,6 @@ pod 'FoldingCell'
or [Carthage](https://github.com/Carthage/Carthage) users can simply add Mantle to their `Cartfile`:
```
github "Ramotion/folding-cell"
```
or just drag and drop FoldingCell.swift file to your project
@@ -156,24 +162,25 @@ fileprivate struct C {
Create foregroundView and containerView from code (steps 2 - 3) look example:
[Folding-cell-programmatically](https://github.com/ober01/Folding-cell-programmatically)
## Licence
## 🗂 Check this library on other language:
<a href="https://github.com/Ramotion/folding-cell-android">
<img src="https://github.com/ramotion/navigation-stack/raw/master/Android_Java@2x.png" width="178" height="81"></a>
## 📄 License
Folding cell 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>
# Get the Showroom App for iOS to give it a try
If you use the open-source library in your project, please make sure to credit and backlink to 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=folding-cell&mt=8" >
<img src="https://github.com/ramotion/gliding-collection/raw/master/app_store@2x.png" width="117" height="34"></a>
<a href="mailto:alex.a@ramotion.com?subject=Project%20inquiry%20from%20Github">
<a href="https://dev.ramotion.com?utm_source=gthb&utm_medium=repo&utm_campaign=folding-cell">
<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 update<br>
<a href="https://goo.gl/rPFpid" >
<img src="https://i.imgur.com/ziSqeSo.png/" width="156" height="28"></a>
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 16 KiB