Compare commits

..
117 Commits
Author SHA1 Message Date
Alex 969de052b5 Merge pull request #90 from dhiraj-das/DD_bugfix
folding animation does not update
2017-04-19 09:33:51 +03:00
Alex 6bbb16b789 Merge pull request #93 from LambdaDigamma/master
Remove force-unwrapped optional
2017-04-19 09:32:16 +03:00
Alex 2f674a55aa Merge pull request #104 from tangchunhin1628/master
Invalid container height check
2017-04-19 09:31:49 +03:00
Alex 4f0839691d Merge pull request #107 from zhongwuzw/master
bugFix: only copy containerView's height constraint
2017-04-19 09:29:19 +03:00
zhongwuzw 400dbe0026 bugFix: only copy containerView's height constraint 2017-04-18 23:21:24 +08:00
Juri Vasylenko d4e153b429 Update README.md 2017-04-05 20:00:19 +03:00
Adrian Tang 099764c8a7 Update FoldingCell.swift
Fixed the invalid check on container height when item count is 2.
2017-04-01 18:17:17 +08:00
Alex 12802f304b Merge pull request #102 from Sufi-Al-Hussaini/master
Fixed pod install entry in README.md
2017-03-21 09:27:28 +03:00
Shoaib Ahmed acd221c9eb Update README.md 2017-03-21 10:24:11 +04:00
Alex Mikhnev ea002f99fb Update README.md 2017-03-10 19:57:38 +03:00
Juri Vasylenko 6f78c54039 Update README.md 2017-02-17 17:57:42 +03:00
LambdaDigamma 002d6158e6 Remove force-unwrapped optional
Removed force-unwrapped optional causing a crash (found nil while
unwrapping optional) in pb_takeSnapshot ->
https://github.com/Ramotion/folding-cell/issues/89
2017-01-21 17:33:47 +01:00
Juri Vasylenko fd443d5fb5 Update README.md 2017-01-20 16:05:11 +03:00
Dhiraj Das d8ded28b60 folding animation does not update
incorrectly expanding the cell height below the selected cell.
2017-01-17 14:30:28 +05:30
aleksei1000000 f32dca84ee Update README.md 2017-01-10 17:15:58 +03:00
Alex f783526444 Update README.md 2016-12-05 14:33:39 +03:00
Alex.k e4e75eb5c5 update podspec and readme 2016-12-05 09:23:06 +03:00
Alex 980dc63dd9 Merge pull request #84 from qasimsina/master
Update FoldingCell.swift
2016-12-05 08:18:23 +02:00
Sina Qasim a0021618de Update FoldingCell.swift 2016-12-04 16:16:38 +03:30
Alex.k 7a931cb414 updated readme and podspec 2016-11-30 17:04:03 +03:00
Alex ab56f9ad83 Merge pull request #83 from markj/master
Support different animationDurations for opening / closing cells
2016-11-30 15:57:33 +02:00
Mark Johnson 47397e60c6 Make durationSequence respect different animation times for opening or closing a cell 2016-11-30 13:38:45 +00:00
aleksei1000000 63e9ff9410 Update README.md 2016-10-17 10:01:43 +03:00
aleksei1000000 6b95f91f86 Update README.md 2016-10-14 14:42:24 +03:00
aleksei1000000 c439f9af9b Update README.md 2016-10-14 14:08:24 +03:00
Alex.k 5bd466425f updated readme 2016-10-13 14:16:56 +03:00
Alex 4b152e7901 Update README.md 2016-10-13 10:45:59 +03:00
Alex.k 756c665759 Fixes #48 2016-10-11 16:12:54 +03:00
Alex.k 29f151dcef update readme and podspec 2016-10-11 15:50:15 +03:00
Alex.k d68443df05 fixed animation with corner radius 2016-10-11 15:46:12 +03:00
Alex.k 53e7bddbcc checked button handler in cell 2016-10-11 14:53:20 +03:00
Alex.k 2063e38cc1 fixed bug with hide foregroundView 2016-10-11 14:51:56 +03:00
aleksei1000000 91a14fbbfc Update README.md 2016-09-29 17:09:22 +03:00
Juri Vasylenko 3407098558 Update README.md 2016-09-29 18:02:34 +04:00
Juri Vasylenko 186e35c9b3 Update README.md 2016-09-29 17:49:13 +04:00
Alex.k 54045e3d50 update readme 2016-09-23 10:31:39 +03:00
Alex 9c6c0b5e25 Merge pull request #61 from mohpor/Swift3
Added Xcode 8 (Beta 6) support
2016-09-23 10:18:51 +03:00
M. Porooshani 4dbcadd7f4 Added Xcode 8 (Beta 6) support 2016-08-29 12:04:13 +04:30
Juri Vasylenko ff188166b7 Update README.md 2016-08-05 12:03:49 +04:00
Juri Vasylenko f0a8ebdb79 Update README.md 2016-07-29 16:15:43 +04:00
Juri Vasylenko f7fe23006a Merge pull request #49 from aleksei1000000/patch-1
Update README.md
2016-07-21 15:39:38 +04:00
aleksei1000000 12792d60f6 Update README.md 2016-07-21 14:35:01 +03:00
aleksei1000000 2c84447e89 Update README.md 2016-07-21 12:08:24 +03:00
Alex 2055f0f737 Update README.md 2016-06-15 10:34:46 +03:00
Alex.k 83e3cb88c8 updated docs 2016-06-15 10:33:04 +03:00
Alex.k 836c4f80e5 added outlets for top constraints 2016-06-15 10:01:39 +03:00
Alex.k b6525b5dde Fixes #25 2016-06-14 18:02:31 +03:00
Alex.k 6474edec91 update docs 2016-06-10 10:34:25 +03:00
Alex.k e6818ed0d4 update readme 2016-06-10 10:31:34 +03:00
Alex.k f2c31da3b5 Fixes #20 2016-06-09 15:52:57 +03:00
Alex.k c87b5f5892 update podspec 2016-06-09 14:31:25 +03:00
Alex.k 4400c84731 small fix 2016-06-09 14:30:52 +03:00
Alex.k 0dc0feb973 update podspec 2016-06-09 14:27:28 +03:00
Alex.k 26ed2cd39f updated docs 2016-06-09 14:26:06 +03:00
Alex.k 045d11c6b1 added public method commonInit 2016-06-09 14:21:52 +03:00
Alex.k 457fd53024 update podspec 2016-06-09 12:55:44 +03:00
Alex.k ffbfd5f85b add public init 2016-06-09 12:55:02 +03:00
Alex.k 26f9ffab71 update podspec 2016-06-09 12:30:47 +03:00
Alex.k c44863dc7a programmatically support 2016-06-09 12:29:32 +03:00
Alex.k 3264053f14 podspec updated 2016-06-06 17:26:40 +03:00
Alex.k 4c6cb28aaa update podspec 2016-06-06 15:15:11 +03:00
Alex.k 7924f4ae1a update readme 2016-06-06 11:15:44 +03:00
Alex.k a0f43fa3b6 Merge branch 'master' of https://github.com/Ramotion/folding-cell 2016-06-06 11:11:54 +03:00
Alex.k f2ceaff18e added docs 2016-06-06 11:11:48 +03:00
Alex 19af60376a Update README.md 2016-06-02 16:33:45 +03:00
Alex.k 9ec801a03d update readme 2016-06-02 15:14:10 +03:00
Alex.k cbd090fcc6 small fixing 2016-06-02 14:54:23 +03:00
Alex.k 723d30af95 removed warning 2016-06-02 14:51:57 +03:00
Alex.k 47d262902c Merge branch 'master' of https://github.com/Ramotion/folding-cell 2016-06-02 14:50:25 +03:00
Alex.k 739c320ae9 shared scheme 2016-06-02 14:50:19 +03:00
Alex 551052bfb7 Merge pull request #31 from Dershowitz011/patch-1
Update README.md
2016-05-23 13:07:58 +00:00
Shantanu Desai 3ccbf1b099 Update README.md
Saved you the trouble of making it carthage compatible. If you're ok with this, please merge the request. Thanks.
2016-04-15 21:59:20 +05:30
Alex 932920b45b Update README.md 2016-04-08 17:08:18 +03:00
Alex.k 01b09a94ea update podspec 2016-04-08 17:03:47 +03:00
Alex.k 8c234e4e0d fixing bug with corners 2016-04-08 17:02:56 +03:00
Alex.k 974ab5eed5 Merge branch 'master' of https://github.com/Ramotion/folding-cell 2016-04-08 16:42:50 +03:00
Alex.k 8e7bb1ee35 remove xcschemes 2016-04-08 16:42:43 +03:00
Alex 5d6c1b6dad Update README.md 2016-04-08 16:36:44 +03:00
Alex.k 982c9e1b30 update files 2016-04-08 16:32:29 +03:00
Alex.k 6956f385b3 remove ++ operator 2016-04-08 16:30:23 +03:00
Alex 4f641597d7 Update README.md 2016-03-09 12:07:44 +03:00
Alex.k 878a473b02 update podspec 2016-03-09 12:05:18 +03:00
Alex.k 1ebd9b3e6f Fixes #26 2016-03-09 12:00:55 +03:00
Alex.k b7dc1f1d75 podspec updated 2016-03-09 09:16:43 +03:00
Artem Kyslicyn 21e64f72c1 Merge pull request #24 from Ramotion/develop
upd
2016-02-26 12:07:15 +03:00
Artem Kislitsyn 33dfe08a96 upd 2016-02-26 12:02:34 +03:00
Alex 9d0982e62d Merge pull request #23 from Ramotion/develop
update doc
2016-02-26 11:48:39 +03:00
Artem Kislitsyn b1b564e1e9 update doc 2016-02-26 11:40:55 +03:00
Alex 3ca2172098 Update README.md 2016-02-24 10:22:58 +03:00
Alex.k 9ea71b64eb public properties: itemCount, backViewColor 2016-02-24 10:12:26 +03:00
Alex 306632b484 Update README.md 2016-02-15 14:47:02 +03:00
Alex.k def7ad435b update podspec 2016-02-15 14:45:30 +03:00
Alex.k 9db9073217 Merge branch 'master' of https://github.com/Ramotion/folding-cell 2016-02-15 14:42:33 +03:00
Alex.k a5efd73115 code improved 2016-02-15 14:42:26 +03:00
Juri Vasylenko 882ef88655 add header 2016-02-15 11:26:28 +03:00
Alex.k 216a62c6ab update podspec 2016-02-11 12:06:14 +03:00
Alex.k ce1d4cd8bd common code improves 2016-02-11 11:45:37 +03:00
Alex.k 0e87bcfc63 common code improves 2016-02-11 11:34:32 +03:00
Alex.k 3bc71e84ee common code fixed 2016-02-11 11:23:15 +03:00
Alex 4f5a0ca337 Update README.md 2016-02-11 10:11:42 +03:00
Alex ab8c7feee8 Update README.md
Fixes#12
2016-02-11 10:09:49 +03:00
Juri Vasylenko 27913fd179 Merge pull request #11 from grodowski/master
Add code quality badge from codebeat
2016-02-10 15:54:51 +03:00
Jan Grodowski 775c05a1d0 Update README.md 2016-02-10 13:30:17 +01:00
Alex 2953ca5342 Merge pull request #7 from radarhere/patch-1
Fixed typo
2016-02-09 14:10:26 +03:00
Andrew Murray 16ba4b27b0 Fixed typo 2016-02-09 21:52:13 +11:00
Juri Vasylenko 36c23cf714 Update README.md 2016-02-09 10:32:40 +03:00
Alex.k d6e37f7f01 Merge branch 'master' of https://github.com/Ramotion/folding-cell 2016-02-08 12:38:08 +03:00
Alex.k 38fa225507 update podspec 2016-02-08 12:38:01 +03:00
Alex 98352afdc7 Update README.md 2016-02-05 11:13:50 +03:00
Alex.k e5c63c9812 Fixes #5 2016-02-05 11:04:55 +03:00
Alex.k 4ec5646fa1 Revert "Fixes #45"
This reverts commit 20d7be5ca0.
2016-02-05 11:03:06 +03:00
Alex.k 20d7be5ca0 Fixes #45 2016-02-05 11:02:30 +03:00
Alex 0871b243b3 Update README.md 2016-02-04 17:11:35 +03:00
Alex.k d41c599568 update podspect 2016-02-04 17:08:45 +03:00
Alex.k e720eaf3f3 common improves 2016-02-04 17:07:20 +03:00
Alex 4c3d646349 Update .travis.yml 2016-02-03 15:41:06 +03:00
Alex.k 4d41164378 changed version 2016-02-03 14:14:27 +03:00
41 changed files with 3380 additions and 868 deletions
+12 -4
View File
@@ -1,6 +1,14 @@
osx_image: xcode7.2
osx_image: xcode8
language: objective-c
xcode_project: FoldingCell/FoldingCell.xcodeproj
xcode_scheme: FoldingCell
xcode_sdk: iphonesimulator9.1
env:
- DESTINATION="OS=10.0,name=iPhone 6s" SCHEME="FoldingCell" SDK=iphonesimulator10.0
before_install:
- gem install xcpretty --no-rdoc --no-ri --no-document --quiet
script:
- set -o pipefail
- xcodebuild -version
- xcodebuild -project FoldingCell/FoldingCell.xcodeproj -scheme "FoldingCell" -sdk "$SDK" -destination "$DESTINATION"
-configuration Debug ONLY_ACTIVE_ARCH=NO build | xcpretty -c
- xcodebuild -project FoldingCell/FoldingCell.xcodeproj -scheme "FoldingCell" -sdk "$SDK" -destination "$DESTINATION"
-configuration Release ONLY_ACTIVE_ARCH=NO build | xcpretty -c
+1 -2
View File
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'FoldingCell'
s.version = '0.3'
s.version = '2.0.3'
s.summary = 'UITableViewCell with folding animation.'
s.homepage = 'https://github.com/Ramotion/folding-cell'
s.license = 'MIT'
@@ -8,5 +8,4 @@ Pod::Spec.new do |s|
s.ios.deployment_target = '8.0'
s.source = { :git => 'https://github.com/Ramotion/folding-cell.git', :tag => s.version.to_s }
s.source_files = 'FoldingCell/FoldingCell/FoldingCell/*.swift'
s.requires_arc = true
end
+182 -18
View File
@@ -15,6 +15,10 @@
847A581F1C29500B0028FB84 /* MainTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847A581E1C29500B0028FB84 /* MainTableViewController.swift */; };
848B463B1C56458C00D49B45 /* FoldingCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847A581A1C294FAB0028FB84 /* FoldingCell.swift */; };
8498513F1C5639F9006FA400 /* FoldingCellTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8498513E1C5639F9006FA400 /* FoldingCellTests.swift */; };
8499D8881D0054A8004B5B37 /* FoldingCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 8499D8871D0054A8004B5B37 /* FoldingCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
8499D88C1D0054A8004B5B37 /* FoldingCell.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8499D8851D0054A8004B5B37 /* FoldingCell.framework */; };
8499D88D1D0054A8004B5B37 /* FoldingCell.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8499D8851D0054A8004B5B37 /* FoldingCell.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
8499D8911D0054BF004B5B37 /* FoldingCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847A581A1C294FAB0028FB84 /* FoldingCell.swift */; };
8499F5DD1C2A83F70027D5D2 /* OpenSans-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8499F5D31C2A83F70027D5D2 /* OpenSans-Bold.ttf */; };
8499F5DE1C2A83F70027D5D2 /* OpenSans-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8499F5D41C2A83F70027D5D2 /* OpenSans-BoldItalic.ttf */; };
8499F5DF1C2A83F70027D5D2 /* OpenSans-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8499F5D51C2A83F70027D5D2 /* OpenSans-ExtraBold.ttf */; };
@@ -36,6 +40,13 @@
remoteGlobalIDString = 847A58031C294F750028FB84;
remoteInfo = FoldingCell;
};
8499D88A1D0054A8004B5B37 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 847A57FC1C294F750028FB84 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 8499D8841D0054A8004B5B37;
remoteInfo = FoldingCell;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -45,6 +56,7 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
8499D88D1D0054A8004B5B37 /* FoldingCell.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -54,7 +66,7 @@
/* Begin PBXFileReference section */
840B984B1C33FE660081B926 /* FoldingCellFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FoldingCellFramework.h; sourceTree = "<group>"; };
840B984D1C33FE660081B926 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
847A58041C294F750028FB84 /* FoldingCell.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FoldingCell.app; sourceTree = BUILT_PRODUCTS_DIR; };
847A58041C294F750028FB84 /* FoldingCellDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FoldingCellDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
847A58071C294F750028FB84 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
847A580C1C294F750028FB84 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
847A580E1C294F750028FB84 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@@ -65,6 +77,9 @@
8498513C1C5639F9006FA400 /* FoldingCellTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FoldingCellTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
8498513E1C5639F9006FA400 /* FoldingCellTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoldingCellTests.swift; sourceTree = "<group>"; };
849851401C5639F9006FA400 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; 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>"; };
8499F5D31C2A83F70027D5D2 /* OpenSans-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "OpenSans-Bold.ttf"; sourceTree = "<group>"; };
8499F5D41C2A83F70027D5D2 /* OpenSans-BoldItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "OpenSans-BoldItalic.ttf"; sourceTree = "<group>"; };
8499F5D51C2A83F70027D5D2 /* OpenSans-ExtraBold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "OpenSans-ExtraBold.ttf"; sourceTree = "<group>"; };
@@ -83,6 +98,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
8499D88C1D0054A8004B5B37 /* FoldingCell.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -93,6 +109,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
8499D8811D0054A8004B5B37 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
@@ -111,6 +134,7 @@
847A58061C294F750028FB84 /* FoldingCell */,
840B984A1C33FE660081B926 /* FoldingCellFramework */,
8498513D1C5639F9006FA400 /* FoldingCellTests */,
8499D8861D0054A8004B5B37 /* FoldingCell */,
847A58051C294F750028FB84 /* Products */,
);
sourceTree = "<group>";
@@ -118,8 +142,9 @@
847A58051C294F750028FB84 /* Products */ = {
isa = PBXGroup;
children = (
847A58041C294F750028FB84 /* FoldingCell.app */,
847A58041C294F750028FB84 /* FoldingCellDemo.app */,
8498513C1C5639F9006FA400 /* FoldingCellTests.xctest */,
8499D8851D0054A8004B5B37 /* FoldingCell.framework */,
);
name = Products;
sourceTree = "<group>";
@@ -157,6 +182,15 @@
path = FoldingCellTests;
sourceTree = "<group>";
};
8499D8861D0054A8004B5B37 /* FoldingCell */ = {
isa = PBXGroup;
children = (
8499D8871D0054A8004B5B37 /* FoldingCell.h */,
8499D8891D0054A8004B5B37 /* Info.plist */,
);
path = FoldingCell;
sourceTree = "<group>";
};
8499F5D21C2A83D90027D5D2 /* Fonts */ = {
isa = PBXGroup;
children = (
@@ -176,10 +210,21 @@
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
8499D8821D0054A8004B5B37 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
8499D8881D0054A8004B5B37 /* FoldingCell.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
847A58031C294F750028FB84 /* FoldingCell */ = {
847A58031C294F750028FB84 /* FoldingCellDemo */ = {
isa = PBXNativeTarget;
buildConfigurationList = 847A58161C294F750028FB84 /* Build configuration list for PBXNativeTarget "FoldingCell" */;
buildConfigurationList = 847A58161C294F750028FB84 /* Build configuration list for PBXNativeTarget "FoldingCellDemo" */;
buildPhases = (
847A58001C294F750028FB84 /* Sources */,
847A58011C294F750028FB84 /* Frameworks */,
@@ -189,10 +234,11 @@
buildRules = (
);
dependencies = (
8499D88B1D0054A8004B5B37 /* PBXTargetDependency */,
);
name = FoldingCell;
name = FoldingCellDemo;
productName = FoldingCell;
productReference = 847A58041C294F750028FB84 /* FoldingCell.app */;
productReference = 847A58041C294F750028FB84 /* FoldingCellDemo.app */;
productType = "com.apple.product-type.application";
};
8498513B1C5639F9006FA400 /* FoldingCellTests */ = {
@@ -213,6 +259,24 @@
productReference = 8498513C1C5639F9006FA400 /* FoldingCellTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
8499D8841D0054A8004B5B37 /* FoldingCell */ = {
isa = PBXNativeTarget;
buildConfigurationList = 8499D88E1D0054A8004B5B37 /* Build configuration list for PBXNativeTarget "FoldingCell" */;
buildPhases = (
8499D8801D0054A8004B5B37 /* Sources */,
8499D8811D0054A8004B5B37 /* Frameworks */,
8499D8821D0054A8004B5B37 /* Headers */,
8499D8831D0054A8004B5B37 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = FoldingCell;
productName = FoldingCell;
productReference = 8499D8851D0054A8004B5B37 /* FoldingCell.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
@@ -220,17 +284,24 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0720;
LastUpgradeCheck = 0720;
LastUpgradeCheck = 0800;
ORGANIZATIONNAME = "Alex K.";
TargetAttributes = {
847A58031C294F750028FB84 = {
CreatedOnToolsVersion = 7.2;
DevelopmentTeam = 34MUF9YXTA;
LastSwiftMigration = 0800;
};
8498513B1C5639F9006FA400 = {
CreatedOnToolsVersion = 7.2;
LastSwiftMigration = 0800;
TestTargetID = 847A58031C294F750028FB84;
};
8499D8841D0054A8004B5B37 = {
CreatedOnToolsVersion = 7.3.1;
DevelopmentTeam = LEAZS7L33U;
LastSwiftMigration = 0800;
};
};
};
buildConfigurationList = 847A57FF1C294F750028FB84 /* Build configuration list for PBXProject "FoldingCell" */;
@@ -246,8 +317,9 @@
projectDirPath = "";
projectRoot = "";
targets = (
847A58031C294F750028FB84 /* FoldingCell */,
847A58031C294F750028FB84 /* FoldingCellDemo */,
8498513B1C5639F9006FA400 /* FoldingCellTests */,
8499D8841D0054A8004B5B37 /* FoldingCell */,
);
};
/* End PBXProject section */
@@ -280,6 +352,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
8499D8831D0054A8004B5B37 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -303,14 +382,27 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
8499D8801D0054A8004B5B37 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8499D8911D0054BF004B5B37 /* FoldingCell.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
849851421C5639F9006FA400 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 847A58031C294F750028FB84 /* FoldingCell */;
target = 847A58031C294F750028FB84 /* FoldingCellDemo */;
targetProxy = 849851411C5639F9006FA400 /* PBXContainerItemProxy */;
};
8499D88B1D0054A8004B5B37 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 8499D8841D0054A8004B5B37 /* FoldingCell */;
targetProxy = 8499D88A1D0054A8004B5B37 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
@@ -346,8 +438,10 @@
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_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -369,7 +463,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -390,8 +484,10 @@
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_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -407,9 +503,10 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
VALIDATE_PRODUCT = YES;
};
name = Release;
@@ -417,28 +514,32 @@
847A58171C294F750028FB84 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "iPhone Developer";
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
DEVELOPMENT_TEAM = 34MUF9YXTA;
INFOPLIST_FILE = FoldingCell/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.dev;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
};
name = Debug;
};
847A58181C294F750028FB84 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "iPhone Developer";
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
DEVELOPMENT_TEAM = 34MUF9YXTA;
INFOPLIST_FILE = FoldingCell/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.dev;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
};
name = Release;
};
@@ -447,11 +548,13 @@
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = FoldingCellTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.FoldingCellTests;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FoldingCell.app/FoldingCell";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FoldingCellDemo.app/FoldingCellDemo";
};
name = Debug;
};
@@ -460,11 +563,63 @@
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = FoldingCellTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.FoldingCellTests;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FoldingCell.app/FoldingCell";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FoldingCellDemo.app/FoldingCellDemo";
};
name = Release;
};
8499D88F1D0054A8004B5B37 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = FoldingCell/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.FoldingCell;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Debug;
};
8499D8901D0054A8004B5B37 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = FoldingCell/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.FoldingCell;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
@@ -480,7 +635,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
847A58161C294F750028FB84 /* Build configuration list for PBXNativeTarget "FoldingCell" */ = {
847A58161C294F750028FB84 /* Build configuration list for PBXNativeTarget "FoldingCellDemo" */ = {
isa = XCConfigurationList;
buildConfigurations = (
847A58171C294F750028FB84 /* Debug */,
@@ -498,6 +653,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
8499D88E1D0054A8004B5B37 /* Build configuration list for PBXNativeTarget "FoldingCell" */ = {
isa = XCConfigurationList;
buildConfigurations = (
8499D88F1D0054A8004B5B37 /* Debug */,
8499D8901D0054A8004B5B37 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 847A57FC1C294F750028FB84 /* Project object */;
@@ -1,105 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0720"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "847A58031C294F750028FB84"
BuildableName = "FoldingCell.app"
BlueprintName = "FoldingCell"
ReferencedContainer = "container:">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8498513B1C5639F9006FA400"
BuildableName = "FoldingCellTests.xctest"
BlueprintName = "FoldingCellTests"
ReferencedContainer = "container:">
</BuildableReference>
<LocationScenarioReference
identifier = "com.apple.dt.IDEFoundation.CurrentLocationScenarioIdentifier"
referenceType = "1">
</LocationScenarioReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "847A58031C294F750028FB84"
BuildableName = "FoldingCell.app"
BlueprintName = "FoldingCell"
ReferencedContainer = "container:">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "847A58031C294F750028FB84"
BuildableName = "FoldingCell.app"
BlueprintName = "FoldingCell"
ReferencedContainer = "container:">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "847A58031C294F750028FB84"
BuildableName = "FoldingCell.app"
BlueprintName = "FoldingCell"
ReferencedContainer = "container:">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0720"
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -14,8 +14,8 @@
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "847A58031C294F750028FB84"
BuildableName = "FoldingCell.app"
BlueprintIdentifier = "8499D8841D0054A8004B5B37"
BuildableName = "FoldingCell.framework"
BlueprintName = "FoldingCell"
ReferencedContainer = "container:FoldingCell.xcodeproj">
</BuildableReference>
@@ -28,26 +28,7 @@
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8498513B1C5639F9006FA400"
BuildableName = "FoldingCellTests.xctest"
BlueprintName = "FoldingCellTests"
ReferencedContainer = "container:FoldingCell.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "847A58031C294F750028FB84"
BuildableName = "FoldingCell.app"
BlueprintName = "FoldingCell"
ReferencedContainer = "container:FoldingCell.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
@@ -61,16 +42,15 @@
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "847A58031C294F750028FB84"
BuildableName = "FoldingCell.app"
BlueprintIdentifier = "8499D8841D0054A8004B5B37"
BuildableName = "FoldingCell.framework"
BlueprintName = "FoldingCell"
ReferencedContainer = "container:FoldingCell.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
@@ -80,16 +60,15 @@
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "847A58031C294F750028FB84"
BuildableName = "FoldingCell.app"
BlueprintIdentifier = "8499D8841D0054A8004B5B37"
BuildableName = "FoldingCell.framework"
BlueprintName = "FoldingCell"
ReferencedContainer = "container:FoldingCell.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
+9 -9
View File
@@ -29,30 +29,30 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
return true
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
// Override point for customization after application launch.
return true
}
func applicationWillResignActive(application: UIApplication) {
func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
func applicationDidEnterBackground(application: UIApplication) {
func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(application: UIApplication) {
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(application: UIApplication) {
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(application: UIApplication) {
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8150" systemVersion="15A204g" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11198.2" systemVersion="15G31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8122"/>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
@@ -13,10 +15,9 @@
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
@@ -1,95 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="0cn-rv-Emg">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11201" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="0cn-rv-Emg">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<customFonts key="customFonts">
<mutableArray key="OpenSans-Light.ttf">
<array key="OpenSans-Light.ttf">
<string>OpenSans-Light</string>
<string>OpenSans-Light</string>
</mutableArray>
<mutableArray key="OpenSans-Regular.ttf">
</array>
<array key="OpenSans-Regular.ttf">
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
<string>OpenSans</string>
</mutableArray>
<mutableArray key="OpenSans-Semibold.ttf">
</array>
<array key="OpenSans-Semibold.ttf">
<string>OpenSans-Semibold</string>
<string>OpenSans-Semibold</string>
<string>OpenSans-Semibold</string>
<string>OpenSans-Semibold</string>
<string>OpenSans-Semibold</string>
<string>OpenSans-Semibold</string>
<string>OpenSans-Semibold</string>
<string>OpenSans-Semibold</string>
<string>OpenSans-Semibold</string>
<string>OpenSans-Semibold</string>
<string>OpenSans-Semibold</string>
<string>OpenSans-Semibold</string>
</mutableArray>
</array>
</customFonts>
<scenes>
<!--Main Table View Controller-->
<scene sceneID="Q2d-BE-geS">
<objects>
<tableViewController storyboardIdentifier="MainTableViewController" id="0cn-rv-Emg" customClass="MainTableViewController" customModule="FoldingCell" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" style="plain" separatorStyle="none" showsSelectionImmediatelyOnTouchBegin="NO" rowHeight="667" sectionHeaderHeight="28" sectionFooterHeight="28" id="MwZ-K3-six">
<tableViewController storyboardIdentifier="MainTableViewController" id="0cn-rv-Emg" customClass="MainTableViewController" customModule="FoldingCellDemo" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="667" sectionHeaderHeight="28" sectionFooterHeight="28" id="MwZ-K3-six">
<rect key="frame" x="0.0" y="0.0" width="600" height="695"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="sectionIndexBackgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="sectionIndexBackgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="FoldingCell" rowHeight="667" id="fgm-B1-nUi" customClass="DemoCell" customModule="FoldingCell" customModuleProvider="target">
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="FoldingCell" rowHeight="667" id="fgm-B1-nUi" customClass="DemoCell" customModule="FoldingCellDemo" customModuleProvider="target">
<rect key="frame" x="0.0" y="28" width="600" height="667"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="fgm-B1-nUi" id="MxP-E5-nua">
<rect key="frame" x="0.0" y="0.0" width="600" height="667"/>
<frame key="frameInset" width="600" height="667"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CQr-i9-7br" userLabel="Foreground" customClass="RotatedView" customModule="FoldingCell" customModuleProvider="target">
<rect key="frame" x="20" y="7" width="560" height="165"/>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CQr-i9-7br" userLabel="Foreground" customClass="RotatedView" customModule="FoldingCellDemo" customModuleProvider="target">
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UhV-pr-kw4" userLabel="LeftView">
<rect key="frame" x="0.0" y="0.0" width="88" height="165"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="£25" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uWG-zH-Vjo">
<rect key="frame" x="19" y="31" width="42" height="33"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="#25" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uWG-zH-Vjo">
<fontDescription key="fontDescription" name="OpenSans-Light" family="Open Sans" pointSize="24"/>
<color key="textColor" red="1" green="1" blue="1" alpha="0.8008604307432432" colorSpace="calibratedRGB"/>
<color key="textColor" red="1" green="1" blue="1" alpha="0.8008604307432432" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="TODAY" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FQM-r1-a67">
<rect key="frame" x="18" y="101" width="32" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" red="1" green="1" blue="1" alpha="0.5" colorSpace="calibratedRGB"/>
<color key="textColor" red="1" green="1" blue="1" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="06:30 PM" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9ka-ho-kkM">
<rect key="frame" x="18" y="119" width="57" height="18"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="13"/>
<color key="textColor" red="1" green="1" blue="1" alpha="0.80434438344594594" colorSpace="calibratedRGB"/>
<color key="textColor" red="1" green="1" blue="1" alpha="0.80434438344594594" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.36470588235294116" green="0.29019607843137252" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.36470588235294116" green="0.29019607843137252" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="88" id="79O-5u-rWy"/>
<constraint firstItem="uWG-zH-Vjo" firstAttribute="centerY" secondItem="UhV-pr-kw4" secondAttribute="centerY" constant="-35" id="BKr-4U-Xpn"/>
@@ -101,48 +65,41 @@
</constraints>
</view>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="dots" translatesAutoresizingMaskIntoConstraints="NO" id="lOX-iD-3OO">
<rect key="frame" x="108" y="32" width="8" height="42"/>
<constraints>
<constraint firstAttribute="height" constant="42" id="aAE-ZT-XRW"/>
<constraint firstAttribute="width" constant="8" id="z5d-lD-qkX"/>
</constraints>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EVE-fe-u5I" userLabel="line">
<rect key="frame" x="120" y="52" width="424" height="1"/>
<color key="backgroundColor" red="0.8784313725490196" green="0.8784313725490196" blue="0.8784313725490196" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.8784313725490196" green="0.8784313725490196" blue="0.8784313725490196" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="4Xs-v9-X7G"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="W 85th St, New York, 10024 " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="7" translatesAutoresizingMaskIntoConstraints="NO" id="BUL-Of-nxF" userLabel="W 85th St, New York, 10024">
<rect key="frame" x="124" y="28" width="426" height="20"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="14"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568627450979" blue="0.2627450980392157" alpha="1" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568627450979" blue="0.2627450980392157" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="E 30th St, New York, 10016" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="7" translatesAutoresizingMaskIntoConstraints="NO" id="mNy-cH-kEi" userLabel="W 85th St, New York, 10024">
<rect key="frame" x="124" y="57" width="426" height="20"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="14"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LnD-j0-rqc" userLabel="RightView">
<rect key="frame" x="410" y="100" width="150" height="40"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WEIGHT" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dKi-6r-6NP">
<rect key="frame" x="0.0" y="0.0" width="38" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="0.5" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="light" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fZc-Gv-4xg">
<rect key="frame" x="0.0" y="15" width="39" height="25"/>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="18"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="0.5" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="fZc-Gv-4xg" firstAttribute="leading" secondItem="LnD-j0-rqc" secondAttribute="leading" id="L6e-Uv-9vS"/>
<constraint firstAttribute="bottom" secondItem="fZc-Gv-4xg" secondAttribute="bottom" id="ZRs-x2-A0s"/>
@@ -151,22 +108,19 @@
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="edX-4x-TiO" userLabel="CenterView">
<rect key="frame" x="259" y="100" width="150" height="40"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PLEDGE" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="O5e-nR-iJW">
<rect key="frame" x="0.0" y="0.0" width="37" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="0.5" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="$150" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="a0P-Eh-vI9">
<rect key="frame" x="0.0" y="15" width="42" height="25"/>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="18"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="0.5" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="O5e-nR-iJW" firstAttribute="leading" secondItem="edX-4x-TiO" secondAttribute="leading" id="AYj-MP-1rV"/>
<constraint firstItem="O5e-nR-iJW" firstAttribute="top" secondItem="edX-4x-TiO" secondAttribute="top" id="cgQ-TI-IsS"/>
@@ -175,22 +129,19 @@
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XAj-wA-vfn" userLabel="LeftVoew">
<rect key="frame" x="108" y="100" width="150" height="40"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="REQUESTS" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="X8Y-jq-qbv">
<rect key="frame" x="0.0" y="0.0" width="49" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568627450979" blue="0.2627450980392157" alpha="0.5" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568627450979" blue="0.2627450980392157" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sA6-bX-nDC">
<rect key="frame" x="0.0" y="15" width="11" height="25"/>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="18"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="0.5" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20000000000000001" green="0.23921568630000001" blue="0.26274509800000001" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="sA6-bX-nDC" firstAttribute="leading" secondItem="XAj-wA-vfn" secondAttribute="leading" id="CPD-C5-1TI"/>
<constraint firstAttribute="bottom" secondItem="sA6-bX-nDC" secondAttribute="bottom" id="FLY-M3-HBk"/>
@@ -200,7 +151,7 @@
</constraints>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="LnD-j0-rqc" firstAttribute="centerY" secondItem="XAj-wA-vfn" secondAttribute="centerY" id="1WA-KY-kPA"/>
<constraint firstAttribute="trailing" secondItem="LnD-j0-rqc" secondAttribute="trailing" id="23p-a2-A6L"/>
@@ -231,32 +182,26 @@
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CGm-93-iX0" userLabel="Contener">
<rect key="frame" x="20" y="180" width="560" height="479"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oxa-Zu-WLe" userLabel="FirstContanerView">
<rect key="frame" x="0.0" y="0.0" width="560" height="165"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="o36-zd-BZb" userLabel="bar">
<rect key="frame" x="0.0" y="0.0" width="560" height="49"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vW5-Q1-KFs">
<rect key="frame" x="14" y="10" width="38" height="29"/>
<state key="normal" image="burger"/>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="# 2618-3157" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7eb-NE-XLS">
<rect key="frame" x="0.0" y="0.0" width="560" height="49"/>
<fontDescription key="fontDescription" name="OpenSans-Light" family="Open Sans" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="$25" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4ve-4H-KPK">
<rect key="frame" x="517" y="0.0" width="31" height="49"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.36470588240000001" green="0.29411764709999999" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.36470588240000001" green="0.29411764709999999" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="7eb-NE-XLS" secondAttribute="bottom" id="2hx-ym-O2n"/>
<constraint firstItem="7eb-NE-XLS" firstAttribute="top" secondItem="o36-zd-BZb" secondAttribute="top" id="3Qf-gI-O5n"/>
@@ -275,26 +220,21 @@
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="image" translatesAutoresizingMaskIntoConstraints="NO" id="6Dq-oA-azK">
<rect key="frame" x="0.0" y="49" width="560" height="116"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="image" translatesAutoresizingMaskIntoConstraints="NO" id="6Dq-oA-azK"/>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sdL-VL-QmS" userLabel="LeftVoew">
<rect key="frame" x="10" y="117" width="179" height="40"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="REQUESTS" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qOA-jB-5OO">
<rect key="frame" x="0.0" y="0.0" width="49" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" white="1" alpha="0.5" colorSpace="calibratedWhite"/>
<color key="textColor" red="1" green="1" blue="1" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="S4b-sI-0J6">
<rect key="frame" x="0.0" y="15" width="11" height="25"/>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="qOA-jB-5OO" firstAttribute="top" secondItem="sdL-VL-QmS" secondAttribute="top" id="cGd-ZP-J1s"/>
<constraint firstItem="S4b-sI-0J6" firstAttribute="leading" secondItem="sdL-VL-QmS" secondAttribute="leading" id="j7G-um-lhR"/>
@@ -304,22 +244,19 @@
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="O5y-fi-aEI" userLabel="CenterView">
<rect key="frame" x="190" y="117" width="180" height="40"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PLEDGE" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4DJ-Tz-dlt">
<rect key="frame" x="72" y="0.0" width="37" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" white="1" alpha="0.5" colorSpace="calibratedWhite"/>
<color key="textColor" red="1" green="1" blue="1" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="$150" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DwZ-qm-hHf">
<rect key="frame" x="69" y="15" width="42" height="25"/>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="4DJ-Tz-dlt" firstAttribute="centerX" secondItem="O5y-fi-aEI" secondAttribute="centerX" id="SLb-LN-VUV"/>
<constraint firstAttribute="bottom" secondItem="DwZ-qm-hHf" secondAttribute="bottom" id="ZmA-Kh-YOl"/>
@@ -328,22 +265,19 @@
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LnF-7u-0Wm" userLabel="RightView">
<rect key="frame" x="371" y="117" width="179" height="40"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WEIGHT" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8pV-vb-qIN">
<rect key="frame" x="141" y="0.0" width="38" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" white="1" alpha="0.5" colorSpace="calibratedWhite"/>
<color key="textColor" red="1" green="1" blue="1" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="light" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="R9w-bP-fWa">
<rect key="frame" x="140" y="15" width="39" height="25"/>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="R9w-bP-fWa" secondAttribute="trailing" id="03y-gy-i1D"/>
<constraint firstAttribute="trailing" secondItem="8pV-vb-qIN" secondAttribute="trailing" id="C3p-9o-b86"/>
@@ -352,7 +286,7 @@
</constraints>
</view>
</subviews>
<color key="backgroundColor" red="0.36470588240000001" green="0.29411764709999999" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.36470588240000001" green="0.29411764709999999" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="O5y-fi-aEI" firstAttribute="height" secondItem="sdL-VL-QmS" secondAttribute="height" id="0XV-ym-nC5"/>
<constraint firstAttribute="trailing" secondItem="LnF-7u-0Wm" secondAttribute="trailing" constant="10" id="Cdw-bC-VFs"/>
@@ -375,64 +309,51 @@
<constraint firstItem="O5y-fi-aEI" firstAttribute="leading" secondItem="sdL-VL-QmS" secondAttribute="trailing" constant="1" id="vn1-SH-zt8"/>
</constraints>
</view>
<view tag="1" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="stA-YF-Roj" userLabel="SecondContanerView" customClass="RotatedView" customModule="FoldingCell" customModuleProvider="target">
<rect key="frame" x="0.0" y="165" width="560" height="165"/>
<view tag="1" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="stA-YF-Roj" userLabel="SecondContanerView" customClass="RotatedView" customModule="FoldingCellDemo" customModuleProvider="target">
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SENDER" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="W63-7b-X8w">
<rect key="frame" x="22" y="9" width="38" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" red="0.13725490196078433" green="0.13725490196078433" blue="0.13725490196078433" alpha="0.49546030405405406" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.13725490196078433" green="0.13725490196078433" blue="0.13725490196078433" alpha="0.49546030405405406" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Edward Norton" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ax5-gv-o7S">
<rect key="frame" x="79" y="28" width="473" height="21"/>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="15"/>
<color key="textColor" red="0.20392156862745098" green="0.23921568627450979" blue="0.2627450980392157" alpha="1" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20392156862745098" green="0.23921568627450979" blue="0.2627450980392157" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="stars" translatesAutoresizingMaskIntoConstraints="NO" id="DCW-h4-xYV">
<rect key="frame" x="79" y="54" width="97" height="17"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="stars" translatesAutoresizingMaskIntoConstraints="NO" id="DCW-h4-xYV"/>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="photo" translatesAutoresizingMaskIntoConstraints="NO" id="Nm8-JU-yEj" userLabel="photo">
<rect key="frame" x="22" y="28" width="49" height="49"/>
<constraints>
<constraint firstAttribute="height" constant="49" id="JNu-y1-BLY"/>
<constraint firstAttribute="width" constant="49" id="qpi-cG-s4a"/>
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="arrow" translatesAutoresizingMaskIntoConstraints="NO" id="YsL-0v-aFS">
<rect key="frame" x="522" y="40" width="16" height="25"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="arrow" translatesAutoresizingMaskIntoConstraints="NO" id="YsL-0v-aFS"/>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fuy-ww-tkB" userLabel="line">
<rect key="frame" x="22" y="92" width="516" height="1"/>
<color key="backgroundColor" red="0.396078431372549" green="0.40000000000000002" blue="0.396078431372549" alpha="0.20135663006756757" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.396078431372549" green="0.40000000000000002" blue="0.396078431372549" alpha="0.20135663006756757" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="04T-Vd-Eo2"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lbp-KK-0lW" userLabel="fromView">
<rect key="frame" x="22" y="92" width="258" height="73"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="FROM" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mrt-du-GX9">
<rect key="frame" x="0.0" y="8" width="248" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" red="0.13725490200000001" green="0.13725490200000001" blue="0.13725490200000001" alpha="0.49546030410000003" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.13725490200000001" green="0.13725490200000001" blue="0.13725490200000001" alpha="0.49546030410000003" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="W 90th St" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="I2n-ts-cGO">
<rect key="frame" x="0.0" y="26" width="248" height="21"/>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="15"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="New York, NY 10025" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VHi-qF-ipj">
<rect key="frame" x="0.0" y="47" width="248" height="17"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="12"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="VHi-qF-ipj" firstAttribute="top" secondItem="I2n-ts-cGO" secondAttribute="bottom" id="16U-Jy-hNi"/>
<constraint firstAttribute="trailing" secondItem="VHi-qF-ipj" secondAttribute="trailing" constant="10" id="4Cd-0Z-1Wz"/>
@@ -446,28 +367,24 @@
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="h39-gf-gsn" userLabel="toView">
<rect key="frame" x="281" y="92" width="257" height="73"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="TO" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sel-qV-TVo">
<rect key="frame" x="0.0" y="8" width="257" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" red="0.13725490200000001" green="0.13725490200000001" blue="0.13725490200000001" alpha="0.49546030410000003" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.13725490200000001" green="0.13725490200000001" blue="0.13725490200000001" alpha="0.49546030410000003" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="46th Ave" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AOk-eM-O1f">
<rect key="frame" x="0.0" y="26" width="257" height="21"/>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="15"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Woodside, NY 11101" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7sP-u0-3Jz">
<rect key="frame" x="0.0" y="47" width="257" height="17"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="12"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="AOk-eM-O1f" firstAttribute="top" secondItem="sel-qV-TVo" secondAttribute="bottom" constant="4" id="PcS-xl-55z"/>
<constraint firstItem="sel-qV-TVo" firstAttribute="leading" secondItem="h39-gf-gsn" secondAttribute="leading" id="SVa-gH-2cV"/>
@@ -481,14 +398,13 @@
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dff-zA-mGx" userLabel="bottom line">
<rect key="frame" x="0.0" y="164" width="560" height="1"/>
<color key="backgroundColor" red="0.39607843139999999" green="0.40000000000000002" blue="0.39607843139999999" alpha="0.20135663009999999" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.39607843139999999" green="0.40000000000000002" blue="0.39607843139999999" alpha="0.20135663009999999" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="4RP-hO-LT1"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="DCW-h4-xYV" firstAttribute="top" secondItem="ax5-gv-o7S" secondAttribute="bottom" constant="5" id="0hE-wf-7T7"/>
<constraint firstItem="fuy-ww-tkB" firstAttribute="centerY" secondItem="stA-YF-Roj" secondAttribute="centerY" constant="10" id="11U-5A-z9N"/>
@@ -518,32 +434,27 @@
<constraint firstAttribute="height" constant="165" id="zna-xw-SZ3"/>
</constraints>
</view>
<view tag="2" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dXA-2m-h6U" userLabel="ThirdContanerView" customClass="RotatedView" customModule="FoldingCell" customModuleProvider="target">
<rect key="frame" x="0.0" y="330" width="560" height="72"/>
<view tag="2" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dXA-2m-h6U" userLabel="ThirdContanerView" customClass="RotatedView" customModule="FoldingCellDemo" customModuleProvider="target">
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4an-5P-hxw" userLabel="fromView">
<rect key="frame" x="22" y="0.0" width="257" height="73"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DELIVERY DATE" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gqh-Lu-0yL">
<rect key="frame" x="0.0" y="8" width="247" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" red="0.13725490200000001" green="0.13725490200000001" blue="0.13725490200000001" alpha="0.49546030410000003" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.13725490200000001" green="0.13725490200000001" blue="0.13725490200000001" alpha="0.49546030410000003" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="06:30 pm" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3Nd-1K-xsW">
<rect key="frame" x="0.0" y="26" width="247" height="21"/>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="15"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="May 16, 2015" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CVH-a0-dOK">
<rect key="frame" x="0.0" y="47" width="247" height="17"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="12"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="CVH-a0-dOK" secondAttribute="trailing" constant="10" id="2W4-1g-qUp"/>
<constraint firstItem="Gqh-Lu-0yL" firstAttribute="leading" secondItem="4an-5P-hxw" secondAttribute="leading" id="CPK-DZ-Jna"/>
@@ -557,22 +468,19 @@
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xej-CM-tIb" userLabel="toView">
<rect key="frame" x="282" y="0.0" width="256" height="73"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="REQUEST DEADLINE" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GYY-Sq-cIe">
<rect key="frame" x="0.0" y="8" width="256" height="14"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" red="0.13725490200000001" green="0.13725490200000001" blue="0.13725490200000001" alpha="0.49546030410000003" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.13725490200000001" green="0.13725490200000001" blue="0.13725490200000001" alpha="0.49546030410000003" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="24 minutes" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mgx-5V-Xba">
<rect key="frame" x="0.0" y="26" width="256" height="21"/>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="15"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.20392156859999999" green="0.23921568630000001" blue="0.26274509800000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="mgx-5V-Xba" firstAttribute="leading" secondItem="xej-CM-tIb" secondAttribute="leading" id="BJE-Ky-3Me"/>
<constraint firstAttribute="trailing" secondItem="mgx-5V-Xba" secondAttribute="trailing" id="ULU-ab-35w"/>
@@ -583,7 +491,7 @@
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="xej-CM-tIb" firstAttribute="leading" secondItem="4an-5P-hxw" secondAttribute="trailing" constant="3" id="18O-Ef-V9i"/>
<constraint firstAttribute="bottom" secondItem="xej-CM-tIb" secondAttribute="bottom" constant="-1" id="1tY-3B-4u3"/>
@@ -596,40 +504,39 @@
<constraint firstItem="xej-CM-tIb" firstAttribute="top" secondItem="dXA-2m-h6U" secondAttribute="top" id="xOe-NP-ZG0"/>
</constraints>
</view>
<view tag="3" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="073-FT-8Xc" userLabel="BottomContanerView" customClass="RotatedView" customModule="FoldingCell" customModuleProvider="target">
<rect key="frame" x="0.0" y="402" width="560" height="72"/>
<view tag="3" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="073-FT-8Xc" userLabel="BottomContanerView" customClass="RotatedView" customModule="FoldingCellDemo" customModuleProvider="target">
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7hv-c7-TPM" userLabel="line">
<rect key="frame" x="0.0" y="0.0" width="560" height="10"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="10" id="I7X-zJ-Chv"/>
</constraints>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="GIq-nQ-eox">
<rect key="frame" x="22" y="3" width="516" height="41"/>
<color key="backgroundColor" red="0.99607843137254903" green="0.74509803921568629" blue="0.086274509803921567" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.99607843137254903" green="0.74509803921568629" blue="0.086274509803921567" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="41" id="1a9-RT-Lsa"/>
</constraints>
<fontDescription key="fontDescription" name="OpenSans-Semibold" family="Open Sans" pointSize="18"/>
<state key="normal" title="REQUEST">
<color key="titleColor" red="0.27058823529411763" green="0.21568627450980393" blue="0.082352941176470587" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleColor" red="0.27058823529411763" green="0.21568627450980393" blue="0.082352941176470587" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="10"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="buttonHandler:" destination="fgm-B1-nUi" eventType="touchUpInside" id="qbs-qF-CKr"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="5 people have sent a request" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xRl-uA-7tD">
<rect key="frame" x="0.0" y="44" width="560" height="28"/>
<fontDescription key="fontDescription" name="OpenSans" family="Open Sans" pointSize="10"/>
<color key="textColor" red="0.13725490200000001" green="0.13725490200000001" blue="0.13725490200000001" alpha="0.49546030410000003" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.13725490200000001" green="0.13725490200000001" blue="0.13725490200000001" alpha="0.49546030410000003" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="7hv-c7-TPM" secondAttribute="trailing" id="0cg-br-1Fh"/>
<constraint firstItem="xRl-uA-7tD" firstAttribute="top" secondItem="GIq-nQ-eox" secondAttribute="bottom" id="6Ye-UR-abp"/>
@@ -650,7 +557,7 @@
</userDefinedRuntimeAttributes>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="stA-YF-Roj" secondAttribute="trailing" id="0dd-qw-qxW"/>
<constraint firstItem="dXA-2m-h6U" firstAttribute="top" secondItem="CGm-93-iX0" secondAttribute="top" constant="330" identifier="yPosition" id="1Pb-T0-aLV"/>
@@ -668,7 +575,7 @@
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="CQr-i9-7br" firstAttribute="top" secondItem="MxP-E5-nua" secondAttribute="top" constant="7" identifier="ForegroundViewTop" id="9tL-QY-I0e"/>
<constraint firstAttribute="trailing" secondItem="CQr-i9-7br" secondAttribute="trailing" constant="20" id="eKz-hh-g5H"/>
@@ -678,18 +585,22 @@
<constraint firstItem="CGm-93-iX0" firstAttribute="leading" secondItem="MxP-E5-nua" secondAttribute="leading" constant="20" id="yUf-ga-7bS"/>
</constraints>
</tableViewCellContentView>
<color key="backgroundColor" red="0.91372549020000005" green="0.85277035359999998" blue="0.26274509800000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.91372549020000005" green="0.85277035359999998" blue="0.26274509800000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="color" keyPath="backViewColor">
<color key="value" red="0.96862745100000003" green="0.93725490199999995" blue="0.96862745100000003" alpha="1" colorSpace="calibratedRGB"/>
<color key="value" red="0.96862745100000003" green="0.93725490199999995" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="itemCount">
<integer key="value" value="4"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<outlet property="closeNumberLabel" destination="uWG-zH-Vjo" id="4Fq-wZ-nFd"/>
<outlet property="containerView" destination="CGm-93-iX0" id="gSm-z4-RdG"/>
<outlet property="containerViewTop" destination="wys-AY-Zdw" id="Exs-1v-4Jn"/>
<outlet property="foregroundView" destination="CQr-i9-7br" id="88q-9Z-PtA"/>
<outlet property="foregroundViewTop" destination="9tL-QY-I0e" id="lRz-za-vwR"/>
<outlet property="openNumberLabel" destination="7eb-NE-XLS" id="mrT-hs-afw"/>
</connections>
</tableViewCell>
</prototypes>
+28 -14
View File
@@ -9,21 +9,35 @@
import UIKit
class DemoCell: FoldingCell {
override func awakeFromNib() {
foregroundView.layer.cornerRadius = 10
foregroundView.layer.masksToBounds = true
super.awakeFromNib()
@IBOutlet weak var closeNumberLabel: UILabel!
@IBOutlet weak var openNumberLabel: UILabel!
var number: Int = 0 {
didSet {
closeNumberLabel.text = String(number)
openNumberLabel.text = String(number)
}
}
override func awakeFromNib() {
override func animationDuration(itemIndex:NSInteger, type:AnimationType)-> NSTimeInterval {
let durations = [0.33, 0.26, 0.26]
return durations[itemIndex]
}
foregroundView.layer.cornerRadius = 10
foregroundView.layer.masksToBounds = true
super.awakeFromNib()
}
override func animationDuration(_ itemIndex:NSInteger, type:AnimationType)-> TimeInterval {
let durations = [0.26, 0.2, 0.2]
return durations[itemIndex]
}
}
// MARK: Actions
extension DemoCell {
@IBAction func buttonHandler(_ sender: AnyObject) {
print("tap")
}
}
+19
View File
@@ -0,0 +1,19 @@
//
// FoldingCell.h
// FoldingCell
//
// Created by Alex K. on 02/06/16.
// Copyright © 2016 Alex K. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for FoldingCell.
FOUNDATION_EXPORT double FoldingCellVersionNumber;
//! Project version string for FoldingCell.
FOUNDATION_EXPORT const unsigned char FoldingCellVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <FoldingCell/PublicHeader.h>
@@ -23,463 +23,500 @@
import UIKit
public class FoldingCell: UITableViewCell {
public typealias CompletionHandler = () -> Void
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var foregroundView: RotatedView!
var animationView: UIView?
@IBInspectable var itemCount: NSInteger = 2 //count of folding
@IBInspectable var backViewColor: UIColor = UIColor.brownColor()
var animationItemViews: [RotatedView]?
public enum AnimationType {
case Open
case Close
}
/// UITableViewCell with folding animation
open class FoldingCell: UITableViewCell {
/// UIView whitch display when cell open
@IBOutlet weak open var containerView: UIView!
@IBOutlet weak open var containerViewTop: NSLayoutConstraint!
/// UIView whitch display when cell close
@IBOutlet weak open var foregroundView: RotatedView!
@IBOutlet weak open var foregroundViewTop: NSLayoutConstraint!
var animationView: UIView?
/// the number of folding elements. Default 2
@IBInspectable open var itemCount: NSInteger = 2
/// The color of the back cell
@IBInspectable open var backViewColor: UIColor = UIColor.brown
var animationItemViews: [RotatedView]?
/**
Folding animation types
// MARK: life cicle
- Open: Open direction
- Close: Close direction
*/
public enum AnimationType {
case open
case close
}
// MARK: life cicle
override public init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override open func awakeFromNib() {
super.awakeFromNib()
override public func awakeFromNib() {
super.awakeFromNib()
configureDefaultState()
commonInit()
}
/**
Call this method in methods init(style: UITableViewCellStyle, reuseIdentifier: String?) after creating Views
*/
open func commonInit() {
configureDefaultState()
self.selectionStyle = .none
containerView.layer.cornerRadius = foregroundView.layer.cornerRadius
containerView.layer.masksToBounds = true
}
self.selectionStyle = .None
containerView.layer.cornerRadius = foregroundView.layer.cornerRadius
containerView.layer.masksToBounds = true
}
// MARK: configure
// MARK: configure
func configureDefaultState() {
func configureDefaultState() {
let foregroundTopConstraint = self.contentView.constraints.filter{ $0.identifier == "ForegroundViewTop"}.first
let containerViewTopConstraint = self.contentView.constraints.filter{ $0.identifier == "ContainerViewTop"}.first
assert(foregroundTopConstraint != nil, "set identifier")
assert(containerViewTopConstraint != nil, "set identifier")
containerViewTopConstraint!.constant = foregroundTopConstraint!.constant
containerView.alpha = 0;
foregroundView.layer.anchorPoint = CGPoint.init(x: 0.5, y: 1)
foregroundTopConstraint!.constant += foregroundView.bounds.height / 2
foregroundView.layer.transform = foregroundView.transform3d()
createAnimationView();
self.contentView.bringSubviewToFront(foregroundView)
guard let foregroundViewTop = self.foregroundViewTop,
let containerViewTop = self.containerViewTop else {
fatalError("set constratins outlets")
}
func createAnimationItemView()->[RotatedView] {
var items = [RotatedView]()
items.append(foregroundView)
var rotatedViews = [RotatedView]()
for itemView in animationView!.subviews.filter({$0 is RotatedView}).sort({ $0.tag < $1.tag }) as! [RotatedView] {
rotatedViews.append(itemView)
if itemView.backView != nil {
rotatedViews.append(itemView.backView!)
}
}
items.appendContentsOf(rotatedViews)
return items
containerViewTop.constant = foregroundViewTop.constant
containerView.alpha = 0;
if let height = (foregroundView.constraints.filter { $0.firstAttribute == .height && $0.secondItem == nil}).first?.constant {
foregroundView.layer.anchorPoint = CGPoint(x: 0.5, y: 1)
foregroundViewTop.constant += height / 2
}
foregroundView.layer.transform = foregroundView.transform3d()
createAnimationView();
self.contentView.bringSubview(toFront: foregroundView)
}
func createAnimationItemView()->[RotatedView] {
guard let animationView = self.animationView else {
fatalError()
}
func configureAnimationItems(animationType: AnimationType) {
if animationType == .Open {
for view in animationView!.subviews.filter({$0 is RotatedView}) {
view.alpha = 0;
}
} else { // close
for view: RotatedView in animationView!.subviews.filter({$0 is RotatedView}) as! [RotatedView] {
if animationType == .Open {
view.alpha = 0
} else {
view.alpha = 1
view.backView?.alpha = 0
}
}
}
var items = [RotatedView]()
items.append(foregroundView)
var rotatedViews = [RotatedView]()
for case let itemView as RotatedView in animationView.subviews.filter({$0 is RotatedView}).sorted(by: {$0.tag < $1.tag}) {
rotatedViews.append(itemView)
if let backView = itemView.backView {
rotatedViews.append(backView)
}
}
items.append(contentsOf: rotatedViews)
return items
}
func configureAnimationItems(_ animationType: AnimationType) {
guard let animationViewSuperView = animationView?.subviews else {
fatalError()
}
func createAnimationView() {
let anAnimationView = UIView(frame: containerView.frame)
anAnimationView.layer.cornerRadius = foregroundView.layer.cornerRadius
anAnimationView.backgroundColor = UIColor.clearColor()
anAnimationView.translatesAutoresizingMaskIntoConstraints = false
self.contentView.addSubview(anAnimationView)
// copy constraints from containerView
var newConstraints = [NSLayoutConstraint]()
for constraint in self.contentView.constraints {
if let item: UIView = constraint.firstItem as? UIView {
if item == containerView {
let newConstraint = NSLayoutConstraint(
item: anAnimationView,
attribute: constraint.firstAttribute,
relatedBy: constraint.relation,
toItem: constraint.secondItem,
attribute: constraint.secondAttribute,
multiplier: constraint.multiplier,
constant: constraint.constant)
newConstraints.append(newConstraint)
} else if let item: UIView = constraint.secondItem as? UIView {
if item == containerView {
let newConstraint = NSLayoutConstraint(
item: constraint.firstItem,
attribute: constraint.firstAttribute,
relatedBy: constraint.relation,
toItem: anAnimationView,
attribute: constraint.secondAttribute,
multiplier: constraint.multiplier,
constant: constraint.constant)
newConstraints.append(newConstraint)
}
}
}
}
self.contentView.addConstraints(newConstraints)
for constraint in containerView.constraints { // added height constraint
if constraint.firstAttribute == .Height {
let newConstraint = NSLayoutConstraint(
item: anAnimationView,
attribute: constraint.firstAttribute,
relatedBy: constraint.relation,
toItem: nil,
attribute: constraint.secondAttribute,
multiplier: constraint.multiplier,
constant: constraint.constant)
anAnimationView.addConstraint(newConstraint)
}
}
animationView = anAnimationView
}
func addImageItemsToAnimationView() {
containerView.alpha = 1;
// added first item
var image = containerView.pb_takeSnapshot(CGRect(x: 0, y: 0, width: containerView.bounds.size.width, height: foregroundView.bounds.size.height))
var imageView = UIImageView(image: image)
imageView.tag = 0
imageView.layer.cornerRadius = foregroundView.layer.cornerRadius
animationView?.addSubview(imageView)
// added secod item
image = containerView.pb_takeSnapshot(
CGRect(x: 0,
y: foregroundView.bounds.size.height,
width: containerView.bounds.size.width,
height: foregroundView.bounds.size.height))
imageView = UIImageView(image: image)
let rotatedView = RotatedView(frame: imageView.frame)
rotatedView.tag = 1
rotatedView.layer.anchorPoint = CGPoint.init(x: 0.5, y: 0)
rotatedView.layer.transform = rotatedView.transform3d()
rotatedView.addSubview(imageView)
animationView?.addSubview(rotatedView)
rotatedView.frame = CGRect(x: imageView.frame.origin.x,
y: foregroundView.bounds.size.height,
width: containerView.bounds.size.width,
height: foregroundView.bounds.size.height)
// added other views
let itemHeight = (containerView.bounds.size.height - 2 * foregroundView.bounds.size.height) / CGFloat(itemCount - 2)
if itemCount == 2 {
// decrease containerView height or increase itemCount
assert(containerView.bounds.size.height - 2 * foregroundView.bounds.size.height == 0, "contanerView.height too high")
}
// decrease containerView height or increase itemCount
assert(containerView.bounds.size.height - 2 * foregroundView.bounds.size.height >= itemHeight, "contanerView.height too high")
var yPosition = 2 * foregroundView.bounds.size.height
var tag = 2
for var index = 2; index < itemCount; index++ {
image = containerView.pb_takeSnapshot(CGRect(x: 0, y: yPosition, width: containerView.bounds.size.width, height: itemHeight))
imageView = UIImageView(image: image)
let rotatedView = RotatedView(frame: imageView.frame)
rotatedView.addSubview(imageView)
rotatedView.layer.anchorPoint = CGPoint.init(x: 0.5, y: 0)
rotatedView.layer.transform = rotatedView.transform3d()
animationView?.addSubview(rotatedView)
rotatedView.frame = CGRect(x: 0, y: yPosition, width: rotatedView.bounds.size.width, height: itemHeight)
rotatedView.tag = tag
yPosition += itemHeight
tag++;
}
containerView.alpha = 0;
// added back view
var previusView: RotatedView?
for contener in animationView!.subviews.sort({ $0.tag < $1.tag }) {
if contener is RotatedView && contener.tag > 0 && contener.tag < animationView!.subviews.count {
let rotatedView = contener as! RotatedView
previusView?.addBackView(rotatedView.bounds.size.height, color: backViewColor)
previusView = rotatedView
}
}
animationItemViews = createAnimationItemView()
}
// MARK: public
public func selectedAnimation(isSelected: Bool, animated: Bool, completion: CompletionHandler?) {
if isSelected {
if animated {
containerView.alpha = 0;
openAnimation(completion: completion)
} else {
foregroundView.alpha = 0
containerView.alpha = 1;
}
if animationType == .open {
for view in animationViewSuperView.filter({$0 is RotatedView}) {
view.alpha = 0;
}
} else { // close
for case let view as RotatedView in animationViewSuperView.filter({$0 is RotatedView}) {
if animationType == .open {
view.alpha = 0
} else {
if animated {
closeAnimation(completion: completion)
} else {
foregroundView.alpha = 1;
containerView.alpha = 0;
}
view.alpha = 1
view.backView?.alpha = 0
}
}
}
}
func createAnimationView() {
animationView = UIView(frame: containerView.frame)
animationView?.layer.cornerRadius = foregroundView.layer.cornerRadius
animationView?.backgroundColor = .clear
animationView?.translatesAutoresizingMaskIntoConstraints = false
animationView?.alpha = 0
guard let animationView = self.animationView else { return }
self.contentView.addSubview(animationView)
// copy constraints from containerView
var newConstraints = [NSLayoutConstraint]()
for constraint in self.contentView.constraints {
if let item = constraint.firstItem as? UIView , item == containerView {
let newConstraint = NSLayoutConstraint( item: animationView, attribute: constraint.firstAttribute,
relatedBy: constraint.relation, toItem: constraint.secondItem, attribute: constraint.secondAttribute,
multiplier: constraint.multiplier, constant: constraint.constant)
newConstraints.append(newConstraint)
} else if let item: UIView = constraint.secondItem as? UIView , item == containerView {
let newConstraint = NSLayoutConstraint(item: constraint.firstItem, attribute: constraint.firstAttribute,
relatedBy: constraint.relation, toItem: animationView, attribute: constraint.secondAttribute,
multiplier: constraint.multiplier, constant: constraint.constant)
newConstraints.append(newConstraint)
}
}
self.contentView.addConstraints(newConstraints)
for constraint in containerView.constraints { // added height constraint
if constraint.firstAttribute == .height, let item: UIView = constraint.firstItem as? UIView, item == containerView {
let newConstraint = NSLayoutConstraint(item: animationView, attribute: constraint.firstAttribute,
relatedBy: constraint.relation, toItem: nil, attribute: constraint.secondAttribute,
multiplier: constraint.multiplier, constant: constraint.constant)
animationView.addConstraint(newConstraint)
}
}
}
func addImageItemsToAnimationView() {
containerView.alpha = 1;
let contSize = containerView.bounds.size
let forgSize = foregroundView.bounds.size
// added first item
var image = containerView.pb_takeSnapshot(CGRect(x: 0, y: 0, width: contSize.width, height: forgSize.height))
var imageView = UIImageView(image: image)
imageView.tag = 0
imageView.layer.cornerRadius = foregroundView.layer.cornerRadius
animationView?.addSubview(imageView)
// added secod item
image = containerView.pb_takeSnapshot(CGRect(x: 0, y: forgSize.height, width: contSize.width, height: forgSize.height))
imageView = UIImageView(image: image)
let rotatedView = RotatedView(frame: imageView.frame)
rotatedView.tag = 1
rotatedView.layer.anchorPoint = CGPoint.init(x: 0.5, y: 0)
rotatedView.layer.transform = rotatedView.transform3d()
rotatedView.addSubview(imageView)
animationView?.addSubview(rotatedView)
rotatedView.frame = CGRect(x: imageView.frame.origin.x, y: forgSize.height, width: contSize.width, height: forgSize.height)
// added other views
let itemHeight = (contSize.height - 2 * forgSize.height) / CGFloat(itemCount - 2)
if itemCount == 2 {
// decrease containerView height or increase itemCount
assert(contSize.height - 2 * forgSize.height == 0, "contanerView.height too high")
}
else{
// decrease containerView height or increase itemCount
assert(contSize.height - 2 * forgSize.height >= itemHeight, "contanerView.height too high")
}
public func isAnimating()->Bool {
guard animationItemViews != nil
else {
return false
}
for item in animationItemViews! {
if item.layer.animationKeys()?.count > 0 {
return true
}
}
if animationView?.alpha == 1 {
return true
}
return false
var yPosition = 2 * forgSize.height
var tag = 2
for _ in 2..<itemCount {
image = containerView.pb_takeSnapshot(CGRect(x: 0, y: yPosition, width: contSize.width, height: itemHeight))
imageView = UIImageView(image: image)
let rotatedView = RotatedView(frame: imageView.frame)
rotatedView.addSubview(imageView)
rotatedView.layer.anchorPoint = CGPoint.init(x: 0.5, y: 0)
rotatedView.layer.transform = rotatedView.transform3d()
animationView?.addSubview(rotatedView)
rotatedView.frame = CGRect(x: 0, y: yPosition, width: rotatedView.bounds.size.width, height: itemHeight)
rotatedView.tag = tag
yPosition += itemHeight
tag += 1;
}
containerView.alpha = 0;
// MARK: animations
public func animationDuration(itemIndex:NSInteger, type:AnimationType)-> NSTimeInterval {
assert(false, "added this method to cell")
return 0
if let animationView = self.animationView {
// added back view
var previusView: RotatedView?
for case let contener as RotatedView in animationView.subviews.sorted(by: { $0.tag < $1.tag })
where contener.tag > 0 && contener.tag < animationView.subviews.count {
previusView?.addBackView(contener.bounds.size.height, color: backViewColor)
previusView = contener
}
}
animationItemViews = createAnimationItemView()
}
fileprivate func removeImageItemsFromAnimationView() {
func durationSequence(type: AnimationType)-> [NSTimeInterval] {
var durations = [NSTimeInterval]()
for var index = 0; index < itemCount-1; index++ {
let duration = animationDuration(index, type: .Open)
durations.append(NSTimeInterval(duration / 2.0))
durations.append(NSTimeInterval(duration / 2.0))
}
return durations
guard let animationView = self.animationView else {
return
}
animationView.subviews.forEach({ $0.removeFromSuperview() })
}
// MARK: public
/**
Open or close cell
- parameter isSelected: Specify true if you want to open cell or false if you close cell.
- parameter animated: Specify true if you want to animate the change in visibility or false if you want immediately.
- parameter completion: A block object to be executed when the animation sequence ends.
*/
open func selectedAnimation(_ isSelected: Bool, animated: Bool, completion: ((Void) -> Void)?) {
func openAnimation(completion completion: CompletionHandler?) {
if animationView?.subviews.count == 0 { // added animation items if need
addImageItemsToAnimationView()
}
animationView?.alpha = 1;
if isSelected {
if animated {
containerView.alpha = 0;
let durations = durationSequence(.Open)
var delay: NSTimeInterval = 0
var timing = kCAMediaTimingFunctionEaseIn
var from: CGFloat = 0.0;
var to: CGFloat = CGFloat(-M_PI / 2)
var hidden = true
configureAnimationItems(.Open)
for var index = 0; index < animationItemViews?.count; index++ {
let animatedView = animationItemViews![index]
animatedView.foldingAnimation(timing, from: from, to: to, duration: durations[index], delay: delay, hidden: hidden)
from = from == 0.0 ? CGFloat(M_PI / 2) : 0.0;
to = to == 0.0 ? CGFloat(-M_PI / 2) : 0.0;
timing = timing == kCAMediaTimingFunctionEaseIn ? kCAMediaTimingFunctionEaseOut : kCAMediaTimingFunctionEaseIn;
hidden = !hidden
delay += durations[index]
}
let firstItemView = animationView!.subviews.filter{$0.tag == 0}.first
firstItemView!.layer.masksToBounds = true
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(durations[0] * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { () -> Void in
firstItemView!.layer.cornerRadius = 0
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { () -> Void in
self.animationView?.alpha = 0
self.containerView.alpha = 1
completion?()
}
openAnimation(completion)
} else {
foregroundView.alpha = 0
containerView.alpha = 1;
}
} else {
if animated {
closeAnimation(completion)
} else {
foregroundView.alpha = 1;
containerView.alpha = 0;
}
}
}
open func isAnimating()->Bool {
return animationView?.alpha == 1 ? true : false
}
// MARK: animations
open func animationDuration(_ itemIndex:NSInteger, type:AnimationType)-> TimeInterval {
assert(false, "added this method to cell")
return 0
}
func durationSequence(_ type: AnimationType)-> [TimeInterval] {
var durations = [TimeInterval]()
for index in 0..<itemCount-1 {
let duration = animationDuration(index, type: type)
durations.append(TimeInterval(duration / 2.0))
durations.append(TimeInterval(duration / 2.0))
}
return durations
}
func openAnimation(_ completion: ((Void) -> Void)?) {
removeImageItemsFromAnimationView()
addImageItemsToAnimationView()
guard let animationView = self.animationView else {
return
}
func closeAnimation(completion completion: CompletionHandler?) {
if animationView?.subviews.count == 0 { // added animation items if need
addImageItemsToAnimationView()
}
animationView?.alpha = 1;
containerView.alpha = 0;
var durations = durationSequence(.Close)
durations = durations.reverse()
var delay: NSTimeInterval = 0
var timing = kCAMediaTimingFunctionEaseIn
var from: CGFloat = 0.0;
var to: CGFloat = CGFloat(M_PI / 2)
var hidden = true
configureAnimationItems(.Close)
for var index = 0; index < animationItemViews?.count; index++ {
let animatedView = animationItemViews?.reverse()[index]
animatedView!.foldingAnimation(timing, from: from, to: to, duration: durations[index], delay: delay, hidden: hidden)
to = to == 0.0 ? CGFloat(M_PI / 2) : 0.0;
from = from == 0.0 ? CGFloat(-M_PI / 2) : 0.0;
timing = timing == kCAMediaTimingFunctionEaseIn ? kCAMediaTimingFunctionEaseOut : kCAMediaTimingFunctionEaseIn;
hidden = !hidden
delay += durations[index]
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { () -> Void in
self.animationView!.alpha = 0
completion?()
}
let firstItemView = animationView!.subviews.filter{$0.tag == 0}.first
firstItemView!.layer.masksToBounds = false
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64((delay - durations.last! * 1.5) * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) { () -> Void in
firstItemView!.layer.cornerRadius = self.foregroundView.layer.cornerRadius
}
animationView.alpha = 1;
containerView.alpha = 0;
let durations = durationSequence(.open)
var delay: TimeInterval = 0
var timing = kCAMediaTimingFunctionEaseIn
var from: CGFloat = 0.0;
var to: CGFloat = CGFloat(-M_PI / 2)
var hidden = true
configureAnimationItems(.open)
guard let animationItemViews = self.animationItemViews else {
return
}
for index in 0..<animationItemViews.count {
let animatedView = animationItemViews[index]
animatedView.foldingAnimation(timing, from: from, to: to, duration: durations[index], delay: delay, hidden: hidden)
from = from == 0.0 ? CGFloat(M_PI / 2) : 0.0;
to = to == 0.0 ? CGFloat(-M_PI / 2) : 0.0;
timing = timing == kCAMediaTimingFunctionEaseIn ? kCAMediaTimingFunctionEaseOut : kCAMediaTimingFunctionEaseIn;
hidden = !hidden
delay += durations[index]
}
let firstItemView = animationView.subviews.filter{$0.tag == 0}.first
firstItemView?.layer.masksToBounds = true
DispatchQueue.main.asyncAfter(deadline: .now() + durations[0], execute: {
firstItemView?.layer.cornerRadius = 0
})
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: {
self.animationView?.alpha = 0
self.containerView.alpha = 1
completion?()
})
}
func closeAnimation(_ completion: ((Void) -> Void)?) {
removeImageItemsFromAnimationView()
addImageItemsToAnimationView()
guard let animationItemViews = self.animationItemViews else {
fatalError()
}
animationView?.alpha = 1;
containerView.alpha = 0;
var durations: [TimeInterval] = durationSequence(.close).reversed()
var delay: TimeInterval = 0
var timing = kCAMediaTimingFunctionEaseIn
var from: CGFloat = 0.0;
var to: CGFloat = CGFloat(M_PI / 2)
var hidden = true
configureAnimationItems(.close)
if durations.count < animationItemViews.count {
fatalError("wrong override func animationDuration(itemIndex:NSInteger, type:AnimationType)-> NSTimeInterval")
}
for index in 0..<animationItemViews.count {
let animatedView = animationItemViews.reversed()[index]
animatedView.foldingAnimation(timing, from: from, to: to, duration: durations[index], delay: delay, hidden: hidden)
to = to == 0.0 ? CGFloat(M_PI / 2) : 0.0;
from = from == 0.0 ? CGFloat(-M_PI / 2) : 0.0;
timing = timing == kCAMediaTimingFunctionEaseIn ? kCAMediaTimingFunctionEaseOut : kCAMediaTimingFunctionEaseIn;
hidden = !hidden
delay += durations[index]
}
DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: {
self.animationView?.alpha = 0
completion?()
})
let firstItemView = animationView?.subviews.filter{$0.tag == 0}.first
firstItemView?.layer.cornerRadius = 0
firstItemView?.layer.masksToBounds = true
if let durationFirst = durations.first {
DispatchQueue.main.asyncAfter(deadline: .now() + delay - durationFirst * 2, execute: {
firstItemView?.layer.cornerRadius = self.foregroundView.layer.cornerRadius
firstItemView?.setNeedsDisplay()
firstItemView?.setNeedsLayout()
})
}
}
}
// MARK: RotatedView
public class RotatedView: UIView {
var hiddenAfterAnimation = false
var backView: RotatedView?
open class RotatedView: UIView {
var hiddenAfterAnimation = false
var backView: RotatedView?
func addBackView(_ height: CGFloat, color:UIColor) {
let view = RotatedView(frame: CGRect.zero)
view.backgroundColor = color
view.layer.anchorPoint = CGPoint.init(x: 0.5, y: 1)
view.layer.transform = view.transform3d()
view.translatesAutoresizingMaskIntoConstraints = false;
self.addSubview(view)
backView = view
func addBackView(height: CGFloat, color:UIColor) {
let view = RotatedView(frame: CGRect.zero)
view.backgroundColor = color
view.layer.anchorPoint = CGPoint.init(x: 0.5, y: 1)
view.layer.transform = view.transform3d()
view.translatesAutoresizingMaskIntoConstraints = false;
self.addSubview(view)
backView = view
view.addConstraint(NSLayoutConstraint(item: view,
attribute: .Height,
relatedBy: .Equal,
toItem: nil,
attribute: .Height,
multiplier: 1,
constant: height))
self.addConstraints([
NSLayoutConstraint(item: view, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1, constant: self.bounds.size.height - height + height / 2),
NSLayoutConstraint(item: view, attribute: .Leading, relatedBy: .Equal, toItem: self, attribute: .Leading, multiplier: 1, constant: 0),
NSLayoutConstraint(item: view, attribute: .Trailing, relatedBy: .Equal, toItem: self, attribute: .Trailing, multiplier: 1, constant: 0)
])
}
view.addConstraint(NSLayoutConstraint(item: view, attribute: .height, relatedBy: .equal, toItem: nil,attribute: .height,
multiplier: 1, constant: height))
self.addConstraints([
NSLayoutConstraint(item: view, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1,
constant: self.bounds.size.height - height + height / 2),
NSLayoutConstraint(item: view, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading,
multiplier: 1, constant: 0),
NSLayoutConstraint(item: view, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing,
multiplier: 1, constant: 0)
])
}
}
extension RotatedView {
extension RotatedView: CAAnimationDelegate {
func rotatedX(_ angle : CGFloat) {
var allTransofrom = CATransform3DIdentity;
let rotateTransform = CATransform3DMakeRotation(angle, 1, 0, 0)
allTransofrom = CATransform3DConcat(allTransofrom, rotateTransform)
allTransofrom = CATransform3DConcat(allTransofrom, transform3d())
self.layer.transform = allTransofrom
}
func transform3d() -> CATransform3D {
var transform = CATransform3DIdentity
transform.m34 = 2.5 / -2000;
return transform
}
// MARK: animations
func foldingAnimation(_ timing: String, from: CGFloat, to: CGFloat, duration: TimeInterval, delay:TimeInterval, hidden:Bool) {
func rotatedX(angle : CGFloat) {
var allTransofrom = CATransform3DIdentity;
let rotateTransform = CATransform3DMakeRotation(angle, 1, 0, 0)
allTransofrom = CATransform3DConcat(allTransofrom, rotateTransform)
allTransofrom = CATransform3DConcat(allTransofrom, transform3d())
self.layer.transform = allTransofrom
}
let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation.x")
rotateAnimation.timingFunction = CAMediaTimingFunction(name: timing)
rotateAnimation.fromValue = (from)
rotateAnimation.toValue = (to)
rotateAnimation.duration = duration
rotateAnimation.delegate = self;
rotateAnimation.fillMode = kCAFillModeForwards
rotateAnimation.isRemovedOnCompletion = false;
rotateAnimation.beginTime = CACurrentMediaTime() + delay
func transform3d()-> CATransform3D {
var transform = CATransform3DIdentity
transform.m34 = 2.5 / -2000;
return transform
}
self.hiddenAfterAnimation = hidden
// MARK: animations
func foldingAnimation(timing: String, from: CGFloat, to: CGFloat, duration: NSTimeInterval, delay:NSTimeInterval, hidden:Bool) {
let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation.x")
rotateAnimation.timingFunction = CAMediaTimingFunction(name: timing)
rotateAnimation.fromValue = (from)
rotateAnimation.toValue = (to)
rotateAnimation.duration = duration
rotateAnimation.delegate = self;
rotateAnimation.fillMode = kCAFillModeForwards;
rotateAnimation.removedOnCompletion = false;
rotateAnimation.beginTime = CACurrentMediaTime() + delay
self.hiddenAfterAnimation = hidden
self.layer.addAnimation(rotateAnimation, forKey: "rotation.x")
}
override public func animationDidStart(anim: CAAnimation) {
self.layer.shouldRasterize = true
self.alpha = 1
}
override public func animationDidStop(anim: CAAnimation, finished flag: Bool) {
if hiddenAfterAnimation {
self.alpha = 0
}
self.layer.removeAllAnimations()
self.layer.shouldRasterize = false
self.rotatedX(CGFloat(0))
self.layer.add(rotateAnimation, forKey: "rotation.x")
}
public func animationDidStart(_ anim: CAAnimation) {
self.layer.shouldRasterize = true
self.alpha = 1
}
public func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
if hiddenAfterAnimation {
self.alpha = 0
}
self.layer.removeAllAnimations()
self.layer.shouldRasterize = false
self.rotatedX(CGFloat(0))
}
}
extension UIView {
func pb_takeSnapshot(frame: CGRect) -> UIImage {
UIGraphicsBeginImageContextWithOptions(frame.size, false, 0.0);
let context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, frame.origin.x * -1, frame.origin.y * -1);
self.layer.renderInContext(UIGraphicsGetCurrentContext()!);
let image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image
func pb_takeSnapshot(_ frame: CGRect) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(frame.size, false, 0.0)
guard let context = UIGraphicsGetCurrentContext() else { return nil }
context.translateBy(x: frame.origin.x * -1, y: frame.origin.y * -1)
guard let currentContext = UIGraphicsGetCurrentContext() else {
return nil
}
}
self.layer.render(in: currentContext)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
+4 -12
View File
@@ -13,26 +13,18 @@
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>
<string></string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
</dict>
</plist>
@@ -34,7 +34,8 @@ class MainTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = kCloseCellHeight
tableView.rowHeight = UITableViewAutomaticDimension
createCellHeightsArray()
self.tableView.backgroundColor = UIColor(patternImage: UIImage(named: "background")!)
}
@@ -48,56 +49,59 @@ class MainTableViewController: UITableViewController {
// MARK: - Table view data source
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if cell is FoldingCell {
let foldingCell = cell as! FoldingCell
foldingCell.backgroundColor = UIColor.clearColor()
if cellHeights[indexPath.row] == kCloseCellHeight {
foldingCell.selectedAnimation(false, animated: false, completion:nil)
} else {
foldingCell.selectedAnimation(true, animated: false, completion: nil)
}
}
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
guard case let cell as DemoCell = cell else {
return
}
cell.backgroundColor = UIColor.clear
if cellHeights[(indexPath as NSIndexPath).row] == kCloseCellHeight {
cell.selectedAnimation(false, animated: false, completion:nil)
} else {
cell.selectedAnimation(true, animated: false, completion: nil)
}
cell.number = indexPath.row
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("FoldingCell", forIndexPath: indexPath)
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "FoldingCell", for: indexPath)
return cell
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return cellHeights[indexPath.row]
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return cellHeights[(indexPath as NSIndexPath).row]
}
// MARK: Table vie delegate
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath) as! FoldingCell
let cell = tableView.cellForRow(at: indexPath) as! FoldingCell
if cell.isAnimating() {
return
}
var duration = 0.0
if cellHeights[indexPath.row] == kCloseCellHeight { // open cell
cellHeights[indexPath.row] = kOpenCellHeight
if cellHeights[(indexPath as NSIndexPath).row] == kCloseCellHeight { // open cell
cellHeights[(indexPath as NSIndexPath).row] = kOpenCellHeight
cell.selectedAnimation(true, animated: true, completion: nil)
duration = 0.5
} else {// close cell
cellHeights[indexPath.row] = kCloseCellHeight
cellHeights[(indexPath as NSIndexPath).row] = kCloseCellHeight
cell.selectedAnimation(false, animated: true, completion: nil)
duration = 1.1
duration = 0.8
}
UIView.animateWithDuration(duration, delay: 0, options: .CurveEaseOut, animations: { () -> Void in
UIView.animate(withDuration: duration, delay: 0, options: .curveEaseOut, animations: { () -> Void in
tableView.beginUpdates()
tableView.endUpdates()
}, completion: nil)
@@ -16,7 +16,7 @@ class FoldingCellTests: XCTestCase {
super.setUp()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
viewController = storyboard.instantiateViewControllerWithIdentifier("MainTableViewController") as! UITableViewController
viewController = storyboard.instantiateViewController(withIdentifier: "MainTableViewController") as! UITableViewController
viewController.beginAppearanceTransition(true, animated: false)
}
@@ -28,7 +28,7 @@ class FoldingCellTests: XCTestCase {
func testExample() {
let tableView = viewController.tableView
for case let cell as FoldingCell in tableView.visibleCells {
for case let cell as FoldingCell in (tableView?.visibleCells)! {
XCTAssertTrue(cell.itemCount >= 2)
}
@@ -37,7 +37,7 @@ class FoldingCellTests: XCTestCase {
func testPerformanceExample() {
// This is an example of a performance test case.
self.measureBlock {
self.measure {
// Put the code you want to measure the time of here.
}
}
+66 -41
View File
@@ -1,53 +1,81 @@
[![header](https://raw.githubusercontent.com/Ramotion/folding-cell/master/header.png)](https://business.ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=foolding-cell-logo)
# 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)
[![CocoaPods](https://img.shields.io/cocoapods/metrics/doc-percent/FoldingCell.svg)](https://cdn.rawgit.com/Ramotion/folding-cell/master/docs/index.html)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Ramotion/folding-cell)
[![Twitter](https://img.shields.io/badge/Twitter-@Ramotion-blue.svg?style=flat)](http://twitter.com/Ramotion)
[![Travis](https://img.shields.io/travis/Ramotion/folding-cell.svg)](https://travis-ci.org/Ramotion/folding-cell)
[![codebeat badge](https://codebeat.co/badges/6f67da5d-c416-4bac-9fb7-c2dc938feedc)](https://codebeat.co/projects/github-com-ramotion-folding-cell)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![Analytics](https://ga-beacon.appspot.com/UA-84973210-1/ramotion/folding-cell)](https://github.com/igrigorik/ga-beacon)
[shot on dribbble](https://dribbble.com/shots/2121350-Delivery-Card):
![Animation](Screenshots/folding-cell.gif)
## About
This project is maintained by Ramotion, Inc.<br>
We specialize in the designing and coding of custom UI for Mobile Apps and Websites.<br><br>**Looking for developers for your project?**
<a href="https://business.ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=foolding-cell-contact-us/#Get_in_Touch" > <img src="https://github.com/Ramotion/navigation-stack/raw/master/contact_our_team@2x.png" width="150" height="30"></a>
[![Animation](https://raw.githubusercontent.com/Ramotion/folding-cell/master/Screenshots/folding-cell.gif)](https://dribbble.com/shots/2121350-Delivery-Card)
The [iPhone mockup](https://store.ramotion.com?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).
## Try this UI control in action
<a href="https://itunes.apple.com/app/apple-store/id1182360240?pt=550053&ct=gthb-folding-cell&mt=8" > <img src="https://github.com/Ramotion/navigation-stack/raw/master/Download_on_the_App_Store_Badge_US-UK_135x40.png" width="170" height="58"></a>
## Requirements
- iOS 8.0+
- Xcode 7.2
- Xcode 7.3
## Installation
Just add the FoldingCell.swift file to your project.
or use [CocoaPods](https://cocoapods.org) with Podfile:
``` ruby
pod 'FoldingCell', '~> 0.3'
```
pod 'FoldingCell', '~> 2.0.3'
```
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
## Solution
![Solution](/Tutorial-resources/Solution.png)
![Solution](https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/Solution.png)
## Usage
1) Create a new cell inheriting from `FoldingCell`
2) Add a UIView to your cell in your storyboard or nib file, inheriting from `RotatedView`.
Connect the outlet from this view to the cell property `foregroundView`.
Add constraints from this view to the superview, as in this picture:
![1.1](/Tutorial-resources/1.1.png)
Add constraints from this view to the superview, as in this picture:
(constants of constraints may be different). Add the identifier `ForegroundViewTop`
for the top constraint. (This view will be shown when the cell is in its normal state).
![1.1](https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/1.1.png)
(constants of constraints may be different). Connect the outlet from this top constraint to the cell property `foregroundViewTop`
. (This view will be shown when the cell is in its normal state).
3) Add other UIViews to your cell, connect the outlet from this view to the cell
property `containerView`. Add constraints from this view to the superview like in the picture:
![1.2](/Tutorial-resources/1.2.png)
![1.2](https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/1.2.png)
(constants of constraints may be different). Add the identifier "ContainerViewTop" for the top constraint.
(constants of constraints may be different). Connect the outlet from this top constraint to the cell property `containerViewTop`.
(This view will be shown when the cell is opened)
Your result should be something like this picture:
![1.3](/Tutorial-resources/1.3.png)
4) Set ``` @IBInspectable var itemCount: NSInteger ``` property is a count of folding (it IBInspectable you can set in storyborad). range 2 or greater. Default value is 2
![1.3](https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/1.3.png)
[Demonstration adding constraints for foregroundView, containerView](https://vimeo.com/154954299)
4) Set ``` @IBInspectable var itemCount: NSInteger ``` property is a count of folding (it IBInspectable you can set in storyboard). range 2 or greater. Default value is 2
Ok, we've finished configuring the cell.
@@ -55,24 +83,17 @@ Ok, we've finished configuring the cell.
5.1) Add constants:
``` swift
let kCloseCellHeight: CGFloat = *** // equal or greater foregroundView height
let kOpenCellHeight: CGFloat = *** // equal or greater containerView height
fileprivate struct C {
struct CellHeight {
static let close: CGFloat = *** // equal or greater foregroundView height
static let open: CGFloat = *** // equal or greater containerView height
}
}
```
5.2) Add property
5.2) Add property for calculate cells height
``` swift
var cellHeights = [CGFloat]()
```
create in viewDidLoad:
``` swift
override func viewDidLoad() {
super.viewDidLoad()
for _ in 0...kRowsCount {
cellHeights.append(kCloseCellHeight)
}
}
var cellHeights = (0..<CELLCOUNT).map { _ in C.CellHeight.close }
```
5.3) Override method:
@@ -85,7 +106,9 @@ Ok, we've finished configuring the cell.
5.4) Added code to method:
``` swift
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath) as! FoldingCell
guard case let cell as FoldingCell = tableView.cellForRowAtIndexPath(indexPath) else {
return
}
var duration = 0.0
if cellHeights[indexPath.row] == kCloseCellHeight { // open cell
@@ -98,7 +121,7 @@ Ok, we've finished configuring the cell.
duration = 1.1
}
UIView.animateWithDuration(duration, delay: 0, options: .CurveEaseOut, animations: { () -> Void in
UIView.animateWithDuration(duration, delay: 0, options: .CurveEaseOut, animations: { _ in
tableView.beginUpdates()
tableView.endUpdates()
}, completion: nil)
@@ -108,17 +131,15 @@ Ok, we've finished configuring the cell.
``` swift
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if cell is FoldingCell {
let foldingCell = cell as! FoldingCell
if cellHeights![indexPath.row] == kCloseCellHeight {
if case let cell as FoldingCell = cell {
if cellHeights![indexPath.row] == C.cellHeights.close {
foldingCell.selectedAnimation(false, animated: false, completion:nil)
} else {
foldingCell.selectedAnimation(true, animated: false, completion: nil)
}
}
}
```
```
6) Add this code to your new cell class
``` swift
@@ -130,15 +151,19 @@ Ok, we've finished configuring the cell.
}
```
#### if don't use storyboard and xib files
Create foregroundView and containerView from code (steps 2 - 3) look example:
[Folding-cell-programmatically](https://github.com/ober01/Folding-cell-programmatically)
## Licence
Adaptive tab bar is released under the MIT license.
Folding cell is released under the MIT license.
See [LICENSE](./LICENSE) for details.
## About
The project maintained by [app development agency](https://ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=foolding-cell) [Ramotion Inc.](https://ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=foolding-cell)
See our other [open-source projects](https://github.com/ramotion) or [hire](https://ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=foolding-cell) us to design, develop, and grow your product.
## Follow Us
[![Twitter URL](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=https://github.com/ramotion/foolding-cell)
[![Twitter Follow](https://img.shields.io/twitter/follow/ramotion.svg?style=social)](https://twitter.com/ramotion)
+89
View File
@@ -0,0 +1,89 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Classes Reference</title>
<link rel="stylesheet" type="text/css" href="css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="css/highlight.css" />
<meta charset='utf-8'>
<script src="js/jquery.min.js" defer></script>
<script src="js/jazzy.js" defer></script>
</head>
<body>
<a title="Classes Reference"></a>
<header>
<div class="content-wrapper">
<p><a href="index.html">FoldingCell Docs</a> (42% documented)</p>
</div>
</header>
<div class="content-wrapper">
<p id="breadcrumbs">
<a href="index.html">FoldingCell Reference</a>
<img id="carat" src="img/carat.png" />
Classes Reference
</p>
</div>
<div class="content-wrapper">
<nav class="sidebar">
<ul class="nav-groups">
<li class="nav-group-name">
<a href="Classes.html">Classes</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Classes/FoldingCell.html">FoldingCell</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section>
<section class="section">
<h1>Classes</h1>
<p>The following classes are available globally.</p>
</section>
<section class="section task-group-section">
<div class="task-group">
<ul>
<li class="item">
<div>
<code>
<a name="/s:C11FoldingCell11FoldingCell"></a>
<a name="//apple_ref/swift/Class/FoldingCell" class="dashAnchor"></a>
<a class="token" href="#/s:C11FoldingCell11FoldingCell">FoldingCell</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>UITableViewCell with folding animation</p>
<a href="Classes/FoldingCell.html" class="slightly-smaller">See more</a>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="kt">FoldingCell</span><span class="p">:</span> <span class="kt">UITableViewCell</span></code></pre>
</div>
</div>
</section>
</div>
</li>
</ul>
</div>
</section>
</section>
<section id="footer">
<p>&copy; 2016 <a class="link" href="" target="_blank" rel="external">AlexKalinkin</a>. All rights reserved. (Last updated: 2016-06-15)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.5.0</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
</article>
</div>
</body>
</div>
</html>
+330
View File
@@ -0,0 +1,330 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>FoldingCell Class Reference</title>
<link rel="stylesheet" type="text/css" href="../css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="../css/highlight.css" />
<meta charset='utf-8'>
<script src="../js/jquery.min.js" defer></script>
<script src="../js/jazzy.js" defer></script>
</head>
<body>
<a name="//apple_ref/swift/Class/FoldingCell" class="dashAnchor"></a>
<a title="FoldingCell Class Reference"></a>
<header>
<div class="content-wrapper">
<p><a href="../index.html">FoldingCell Docs</a> (42% documented)</p>
</div>
</header>
<div class="content-wrapper">
<p id="breadcrumbs">
<a href="../index.html">FoldingCell Reference</a>
<img id="carat" src="../img/carat.png" />
FoldingCell Class Reference
</p>
</div>
<div class="content-wrapper">
<nav class="sidebar">
<ul class="nav-groups">
<li class="nav-group-name">
<a href="../Classes.html">Classes</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="../Classes/FoldingCell.html">FoldingCell</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section>
<section class="section">
<h1>FoldingCell</h1>
<div class="declaration">
<div class="language">
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="kt">FoldingCell</span><span class="p">:</span> <span class="kt">UITableViewCell</span></code></pre>
</div>
</div>
<p>UITableViewCell with folding animation</p>
</section>
<section class="section task-group-section">
<div class="task-group">
<ul>
<li class="item">
<div>
<code>
<a name="/s:vC11FoldingCell11FoldingCell13containerViewXwGSQCSo6UIView_"></a>
<a name="//apple_ref/swift/Property/containerView" class="dashAnchor"></a>
<a class="token" href="#/s:vC11FoldingCell11FoldingCell13containerViewXwGSQCSo6UIView_">containerView</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>UIView whitch display when cell open</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">@IBOutlet</span> <span class="k">weak</span> <span class="kd">public</span> <span class="k">var</span> <span class="nv">containerView</span><span class="p">:</span> <span class="kt">UIView</span><span class="o">!</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:vC11FoldingCell11FoldingCell14foregroundViewXwGSQCS_11RotatedView_"></a>
<a name="//apple_ref/swift/Property/foregroundView" class="dashAnchor"></a>
<a class="token" href="#/s:vC11FoldingCell11FoldingCell14foregroundViewXwGSQCS_11RotatedView_">foregroundView</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>UIView whitch display when cell close</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">@IBOutlet</span> <span class="k">weak</span> <span class="kd">public</span> <span class="k">var</span> <span class="nv">foregroundView</span><span class="p">:</span> <span class="kt">RotatedView</span><span class="o">!</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:vC11FoldingCell11FoldingCell9itemCountSi"></a>
<a name="//apple_ref/swift/Property/itemCount" class="dashAnchor"></a>
<a class="token" href="#/s:vC11FoldingCell11FoldingCell9itemCountSi">itemCount</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>the number of folding elements. Default 2</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">@IBInspectable</span> <span class="kd">public</span> <span class="k">var</span> <span class="nv">itemCount</span><span class="p">:</span> <span class="kt">NSInteger</span> <span class="o">=</span> <span class="mi">2</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:vC11FoldingCell11FoldingCell13backViewColorCSo7UIColor"></a>
<a name="//apple_ref/swift/Property/backViewColor" class="dashAnchor"></a>
<a class="token" href="#/s:vC11FoldingCell11FoldingCell13backViewColorCSo7UIColor">backViewColor</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>The color of the back cell</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">@IBInspectable</span> <span class="kd">public</span> <span class="k">var</span> <span class="nv">backViewColor</span><span class="p">:</span> <span class="kt">UIColor</span> <span class="o">=</span> <span class="kt">UIColor</span><span class="o">.</span><span class="nf">brownColor</span><span class="p">()</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:OC11FoldingCell11FoldingCell13AnimationType"></a>
<a name="//apple_ref/swift/Enum/AnimationType" class="dashAnchor"></a>
<a class="token" href="#/s:OC11FoldingCell11FoldingCell13AnimationType">AnimationType</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Folding animation types</p>
<ul>
<li>Open: Open direction</li>
<li>Close: Close direction</li>
</ul>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">enum</span> <span class="kt">AnimationType</span></code></pre>
</div>
</div>
</section>
</div>
</li>
</ul>
</div>
<div class="task-group">
<div class="task-name-container">
<a name="/%20life%20cicle"></a>
<a name="//apple_ref/swift/Section/ life cicle" class="dashAnchor"></a>
<a href="#/%20life%20cicle">
<h3 class="section-name"> life cicle</h3>
</a>
</div>
<ul>
<li class="item">
<div>
<code>
<a name="/s:FC11FoldingCell11FoldingCell10commonInitFT_T_"></a>
<a name="//apple_ref/swift/Method/commonInit()" class="dashAnchor"></a>
<a class="token" href="#/s:FC11FoldingCell11FoldingCell10commonInitFT_T_">commonInit()</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Call this method in methods init(style: UITableViewCellStyle, reuseIdentifier: String?) after creating Views</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">commonInit</span><span class="p">()</span></code></pre>
</div>
</div>
</section>
</div>
</li>
</ul>
</div>
<div class="task-group">
<div class="task-name-container">
<a name="/public"></a>
<a name="//apple_ref/swift/Section/public" class="dashAnchor"></a>
<a href="#/public">
<h3 class="section-name">public</h3>
</a>
</div>
<ul>
<li class="item">
<div>
<code>
<a name="/s:FC11FoldingCell11FoldingCell17selectedAnimationFTSb8animatedSb10completionGSqFT_T___T_"></a>
<a name="//apple_ref/swift/Method/selectedAnimation(_:animated:completion:)" class="dashAnchor"></a>
<a class="token" href="#/s:FC11FoldingCell11FoldingCell17selectedAnimationFTSb8animatedSb10completionGSqFT_T___T_">selectedAnimation(_:animated:completion:)</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Open or close cell</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">selectedAnimation</span><span class="p">(</span><span class="nv">isSelected</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">animated</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">completion</span><span class="p">:</span> <span class="p">(</span><span class="kt">Void</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)?)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>isSelected</em>
</code>
</td>
<td>
<div>
<p>Specify true if you want to open cell or false if you close cell.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>animated</em>
</code>
</td>
<td>
<div>
<p>Specify true if you want to animate the change in visibility or false if you want immediately.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>completion</em>
</code>
</td>
<td>
<div>
<p>A block object to be executed when the animation sequence ends.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
</ul>
</div>
</section>
</section>
<section id="footer">
<p>&copy; 2016 <a class="link" href="" target="_blank" rel="external">AlexKalinkin</a>. All rights reserved. (Last updated: 2016-06-15)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.5.0</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
</article>
</div>
</body>
</div>
</html>
+200
View File
@@ -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; }
+331
View File
@@ -0,0 +1,331 @@
html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td {
background: transparent;
border: 0;
margin: 0;
outline: 0;
padding: 0;
vertical-align: baseline; }
body {
background-color: #f2f2f2;
font-family: Helvetica, freesans, Arial, sans-serif;
font-size: 14px;
-webkit-font-smoothing: subpixel-antialiased;
word-wrap: break-word; }
h1, h2, h3 {
margin-top: 0.8em;
margin-bottom: 0.3em;
font-weight: 100;
color: black; }
h1 {
font-size: 2.5em; }
h2 {
font-size: 2em;
border-bottom: 1px solid #e2e2e2; }
h4 {
font-size: 13px;
line-height: 1.5;
margin-top: 21px; }
h5 {
font-size: 1.1em; }
h6 {
font-size: 1.1em;
color: #777; }
.section-name {
color: gray;
display: block;
font-family: Helvetica;
font-size: 22px;
font-weight: 100;
margin-bottom: 15px; }
pre, code {
font: 0.95em Menlo, monospace;
color: #777;
word-wrap: normal; }
p code, li code {
background-color: #eee;
padding: 2px 4px;
border-radius: 4px; }
a {
color: #0088cc;
text-decoration: none; }
ul {
padding-left: 15px; }
li {
line-height: 1.8em; }
img {
max-width: 100%; }
blockquote {
margin-left: 0;
padding: 0 10px;
border-left: 4px solid #ccc; }
.content-wrapper {
margin: 0 auto;
width: 980px; }
header {
font-size: 0.85em;
line-height: 26px;
background-color: #414141;
position: fixed;
width: 100%;
z-index: 1; }
header img {
padding-right: 6px;
vertical-align: -4px;
height: 16px; }
header a {
color: #fff; }
header p {
float: left;
color: #999; }
header .header-right {
float: right;
margin-left: 16px; }
#breadcrumbs {
background-color: #f2f2f2;
height: 27px;
padding-top: 17px;
position: fixed;
width: 100%;
z-index: 1;
margin-top: 26px; }
#breadcrumbs #carat {
height: 10px;
margin: 0 5px; }
.sidebar {
background-color: #f9f9f9;
border: 1px solid #e2e2e2;
overflow-y: auto;
overflow-x: hidden;
position: fixed;
top: 70px;
bottom: 0;
width: 230px;
word-wrap: normal; }
.nav-groups {
list-style-type: none;
background: #fff;
padding-left: 0; }
.nav-group-name {
border-bottom: 1px solid #e2e2e2;
font-size: 1.1em;
font-weight: 100;
padding: 15px 0 15px 20px; }
.nav-group-name > a {
color: #333; }
.nav-group-tasks {
margin-top: 5px; }
.nav-group-task {
font-size: 0.9em;
list-style-type: none; }
.nav-group-task a {
color: #888; }
.main-content {
background-color: #fff;
border: 1px solid #e2e2e2;
margin-left: 246px;
position: absolute;
overflow: hidden;
padding-bottom: 60px;
top: 70px;
width: 734px; }
.main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote {
margin-bottom: 1em; }
.main-content p {
line-height: 1.8em; }
.main-content section .section:first-child {
margin-top: 0;
padding-top: 0; }
.main-content section .task-group-section .task-group:first-of-type {
padding-top: 10px; }
.main-content section .task-group-section .task-group:first-of-type .section-name {
padding-top: 15px; }
.section {
padding: 0 25px; }
.highlight {
background-color: #eee;
padding: 10px 12px;
border: 1px solid #e2e2e2;
border-radius: 4px;
overflow-x: auto; }
.declaration .highlight {
overflow-x: initial;
padding: 0 40px 40px 0;
margin-bottom: -25px;
background-color: transparent;
border: none; }
.section-name {
margin: 0;
margin-left: 18px; }
.task-group-section {
padding-left: 6px;
border-top: 1px solid #e2e2e2; }
.task-group {
padding-top: 0px; }
.task-name-container a[name]:before {
content: "";
display: block;
padding-top: 70px;
margin: -70px 0 0; }
.item {
padding-top: 8px;
width: 100%;
list-style-type: none; }
.item a[name]:before {
content: "";
display: block;
padding-top: 70px;
margin: -70px 0 0; }
.item code {
background-color: transparent;
padding: 0; }
.item .token {
padding-left: 3px;
margin-left: 15px;
font-size: 11.9px; }
.item .declaration-note {
font-size: .85em;
color: gray;
font-style: italic; }
.pointer-container {
border-bottom: 1px solid #e2e2e2;
left: -23px;
padding-bottom: 13px;
position: relative;
width: 110%; }
.pointer {
background: #f9f9f9;
border-left: 1px solid #e2e2e2;
border-top: 1px solid #e2e2e2;
height: 12px;
left: 21px;
top: -7px;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
position: absolute;
width: 12px; }
.height-container {
display: none;
left: -25px;
padding: 0 25px;
position: relative;
width: 100%;
overflow: hidden; }
.height-container .section {
background: #f9f9f9;
border-bottom: 1px solid #e2e2e2;
left: -25px;
position: relative;
width: 100%;
padding-top: 10px;
padding-bottom: 5px; }
.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: #4b8afb; }
.aside-warning {
border-left: 5px solid #ff6666; }
.aside-warning .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 #e2e2e2;
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 {
position: absolute;
bottom: 10px;
margin-left: 25px; }
#footer p {
margin: 0;
color: #aaa;
font-size: 0.8em; }
html.dash header, html.dash #breadcrumbs, html.dash .sidebar {
display: none; }
html.dash .main-content {
width: 980px;
margin-left: 0;
border: none;
width: 100%;
top: 0;
padding-bottom: 0; }
html.dash .height-container {
display: block; }
html.dash .item .token {
margin-left: 0; }
html.dash .content-wrapper {
width: auto; }
html.dash #footer {
position: static; }
@@ -0,0 +1,20 @@
<?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>CFBundleIdentifier</key>
<string>com.jazzy.foldingcell</string>
<key>CFBundleName</key>
<string>FoldingCell</string>
<key>DocSetPlatformFamily</key>
<string>jazzy</string>
<key>isDashDocset</key>
<true/>
<key>dashIndexFilePath</key>
<string>index.html</string>
<key>isJavaScriptEnabled</key>
<true/>
<key>DashDocSetFamily</key>
<string>dashtoc</string>
</dict>
</plist>
@@ -0,0 +1,89 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Classes Reference</title>
<link rel="stylesheet" type="text/css" href="css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="css/highlight.css" />
<meta charset='utf-8'>
<script src="js/jquery.min.js" defer></script>
<script src="js/jazzy.js" defer></script>
</head>
<body>
<a title="Classes Reference"></a>
<header>
<div class="content-wrapper">
<p><a href="index.html">FoldingCell Docs</a> (42% documented)</p>
</div>
</header>
<div class="content-wrapper">
<p id="breadcrumbs">
<a href="index.html">FoldingCell Reference</a>
<img id="carat" src="img/carat.png" />
Classes Reference
</p>
</div>
<div class="content-wrapper">
<nav class="sidebar">
<ul class="nav-groups">
<li class="nav-group-name">
<a href="Classes.html">Classes</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Classes/FoldingCell.html">FoldingCell</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section>
<section class="section">
<h1>Classes</h1>
<p>The following classes are available globally.</p>
</section>
<section class="section task-group-section">
<div class="task-group">
<ul>
<li class="item">
<div>
<code>
<a name="/s:C11FoldingCell11FoldingCell"></a>
<a name="//apple_ref/swift/Class/FoldingCell" class="dashAnchor"></a>
<a class="token" href="#/s:C11FoldingCell11FoldingCell">FoldingCell</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>UITableViewCell with folding animation</p>
<a href="Classes/FoldingCell.html" class="slightly-smaller">See more</a>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="kt">FoldingCell</span><span class="p">:</span> <span class="kt">UITableViewCell</span></code></pre>
</div>
</div>
</section>
</div>
</li>
</ul>
</div>
</section>
</section>
<section id="footer">
<p>&copy; 2016 <a class="link" href="" target="_blank" rel="external">AlexKalinkin</a>. All rights reserved. (Last updated: 2016-06-15)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.5.0</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
</article>
</div>
</body>
</div>
</html>
@@ -0,0 +1,330 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>FoldingCell Class Reference</title>
<link rel="stylesheet" type="text/css" href="../css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="../css/highlight.css" />
<meta charset='utf-8'>
<script src="../js/jquery.min.js" defer></script>
<script src="../js/jazzy.js" defer></script>
</head>
<body>
<a name="//apple_ref/swift/Class/FoldingCell" class="dashAnchor"></a>
<a title="FoldingCell Class Reference"></a>
<header>
<div class="content-wrapper">
<p><a href="../index.html">FoldingCell Docs</a> (42% documented)</p>
</div>
</header>
<div class="content-wrapper">
<p id="breadcrumbs">
<a href="../index.html">FoldingCell Reference</a>
<img id="carat" src="../img/carat.png" />
FoldingCell Class Reference
</p>
</div>
<div class="content-wrapper">
<nav class="sidebar">
<ul class="nav-groups">
<li class="nav-group-name">
<a href="../Classes.html">Classes</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="../Classes/FoldingCell.html">FoldingCell</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section>
<section class="section">
<h1>FoldingCell</h1>
<div class="declaration">
<div class="language">
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="kt">FoldingCell</span><span class="p">:</span> <span class="kt">UITableViewCell</span></code></pre>
</div>
</div>
<p>UITableViewCell with folding animation</p>
</section>
<section class="section task-group-section">
<div class="task-group">
<ul>
<li class="item">
<div>
<code>
<a name="/s:vC11FoldingCell11FoldingCell13containerViewXwGSQCSo6UIView_"></a>
<a name="//apple_ref/swift/Property/containerView" class="dashAnchor"></a>
<a class="token" href="#/s:vC11FoldingCell11FoldingCell13containerViewXwGSQCSo6UIView_">containerView</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>UIView whitch display when cell open</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">@IBOutlet</span> <span class="k">weak</span> <span class="kd">public</span> <span class="k">var</span> <span class="nv">containerView</span><span class="p">:</span> <span class="kt">UIView</span><span class="o">!</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:vC11FoldingCell11FoldingCell14foregroundViewXwGSQCS_11RotatedView_"></a>
<a name="//apple_ref/swift/Property/foregroundView" class="dashAnchor"></a>
<a class="token" href="#/s:vC11FoldingCell11FoldingCell14foregroundViewXwGSQCS_11RotatedView_">foregroundView</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>UIView whitch display when cell close</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">@IBOutlet</span> <span class="k">weak</span> <span class="kd">public</span> <span class="k">var</span> <span class="nv">foregroundView</span><span class="p">:</span> <span class="kt">RotatedView</span><span class="o">!</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:vC11FoldingCell11FoldingCell9itemCountSi"></a>
<a name="//apple_ref/swift/Property/itemCount" class="dashAnchor"></a>
<a class="token" href="#/s:vC11FoldingCell11FoldingCell9itemCountSi">itemCount</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>the number of folding elements. Default 2</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">@IBInspectable</span> <span class="kd">public</span> <span class="k">var</span> <span class="nv">itemCount</span><span class="p">:</span> <span class="kt">NSInteger</span> <span class="o">=</span> <span class="mi">2</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:vC11FoldingCell11FoldingCell13backViewColorCSo7UIColor"></a>
<a name="//apple_ref/swift/Property/backViewColor" class="dashAnchor"></a>
<a class="token" href="#/s:vC11FoldingCell11FoldingCell13backViewColorCSo7UIColor">backViewColor</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>The color of the back cell</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">@IBInspectable</span> <span class="kd">public</span> <span class="k">var</span> <span class="nv">backViewColor</span><span class="p">:</span> <span class="kt">UIColor</span> <span class="o">=</span> <span class="kt">UIColor</span><span class="o">.</span><span class="nf">brownColor</span><span class="p">()</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/s:OC11FoldingCell11FoldingCell13AnimationType"></a>
<a name="//apple_ref/swift/Enum/AnimationType" class="dashAnchor"></a>
<a class="token" href="#/s:OC11FoldingCell11FoldingCell13AnimationType">AnimationType</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Folding animation types</p>
<ul>
<li>Open: Open direction</li>
<li>Close: Close direction</li>
</ul>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">enum</span> <span class="kt">AnimationType</span></code></pre>
</div>
</div>
</section>
</div>
</li>
</ul>
</div>
<div class="task-group">
<div class="task-name-container">
<a name="/%20life%20cicle"></a>
<a name="//apple_ref/swift/Section/ life cicle" class="dashAnchor"></a>
<a href="#/%20life%20cicle">
<h3 class="section-name"> life cicle</h3>
</a>
</div>
<ul>
<li class="item">
<div>
<code>
<a name="/s:FC11FoldingCell11FoldingCell10commonInitFT_T_"></a>
<a name="//apple_ref/swift/Method/commonInit()" class="dashAnchor"></a>
<a class="token" href="#/s:FC11FoldingCell11FoldingCell10commonInitFT_T_">commonInit()</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Call this method in methods init(style: UITableViewCellStyle, reuseIdentifier: String?) after creating Views</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">commonInit</span><span class="p">()</span></code></pre>
</div>
</div>
</section>
</div>
</li>
</ul>
</div>
<div class="task-group">
<div class="task-name-container">
<a name="/public"></a>
<a name="//apple_ref/swift/Section/public" class="dashAnchor"></a>
<a href="#/public">
<h3 class="section-name">public</h3>
</a>
</div>
<ul>
<li class="item">
<div>
<code>
<a name="/s:FC11FoldingCell11FoldingCell17selectedAnimationFTSb8animatedSb10completionGSqFT_T___T_"></a>
<a name="//apple_ref/swift/Method/selectedAnimation(_:animated:completion:)" class="dashAnchor"></a>
<a class="token" href="#/s:FC11FoldingCell11FoldingCell17selectedAnimationFTSb8animatedSb10completionGSqFT_T___T_">selectedAnimation(_:animated:completion:)</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Open or close cell</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">selectedAnimation</span><span class="p">(</span><span class="nv">isSelected</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">animated</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">completion</span><span class="p">:</span> <span class="p">(</span><span class="kt">Void</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)?)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>isSelected</em>
</code>
</td>
<td>
<div>
<p>Specify true if you want to open cell or false if you close cell.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>animated</em>
</code>
</td>
<td>
<div>
<p>Specify true if you want to animate the change in visibility or false if you want immediately.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>completion</em>
</code>
</td>
<td>
<div>
<p>A block object to be executed when the animation sequence ends.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
</ul>
</div>
</section>
</section>
<section id="footer">
<p>&copy; 2016 <a class="link" href="" target="_blank" rel="external">AlexKalinkin</a>. All rights reserved. (Last updated: 2016-06-15)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.5.0</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
</article>
</div>
</body>
</div>
</html>
@@ -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; }
@@ -0,0 +1,331 @@
html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td {
background: transparent;
border: 0;
margin: 0;
outline: 0;
padding: 0;
vertical-align: baseline; }
body {
background-color: #f2f2f2;
font-family: Helvetica, freesans, Arial, sans-serif;
font-size: 14px;
-webkit-font-smoothing: subpixel-antialiased;
word-wrap: break-word; }
h1, h2, h3 {
margin-top: 0.8em;
margin-bottom: 0.3em;
font-weight: 100;
color: black; }
h1 {
font-size: 2.5em; }
h2 {
font-size: 2em;
border-bottom: 1px solid #e2e2e2; }
h4 {
font-size: 13px;
line-height: 1.5;
margin-top: 21px; }
h5 {
font-size: 1.1em; }
h6 {
font-size: 1.1em;
color: #777; }
.section-name {
color: gray;
display: block;
font-family: Helvetica;
font-size: 22px;
font-weight: 100;
margin-bottom: 15px; }
pre, code {
font: 0.95em Menlo, monospace;
color: #777;
word-wrap: normal; }
p code, li code {
background-color: #eee;
padding: 2px 4px;
border-radius: 4px; }
a {
color: #0088cc;
text-decoration: none; }
ul {
padding-left: 15px; }
li {
line-height: 1.8em; }
img {
max-width: 100%; }
blockquote {
margin-left: 0;
padding: 0 10px;
border-left: 4px solid #ccc; }
.content-wrapper {
margin: 0 auto;
width: 980px; }
header {
font-size: 0.85em;
line-height: 26px;
background-color: #414141;
position: fixed;
width: 100%;
z-index: 1; }
header img {
padding-right: 6px;
vertical-align: -4px;
height: 16px; }
header a {
color: #fff; }
header p {
float: left;
color: #999; }
header .header-right {
float: right;
margin-left: 16px; }
#breadcrumbs {
background-color: #f2f2f2;
height: 27px;
padding-top: 17px;
position: fixed;
width: 100%;
z-index: 1;
margin-top: 26px; }
#breadcrumbs #carat {
height: 10px;
margin: 0 5px; }
.sidebar {
background-color: #f9f9f9;
border: 1px solid #e2e2e2;
overflow-y: auto;
overflow-x: hidden;
position: fixed;
top: 70px;
bottom: 0;
width: 230px;
word-wrap: normal; }
.nav-groups {
list-style-type: none;
background: #fff;
padding-left: 0; }
.nav-group-name {
border-bottom: 1px solid #e2e2e2;
font-size: 1.1em;
font-weight: 100;
padding: 15px 0 15px 20px; }
.nav-group-name > a {
color: #333; }
.nav-group-tasks {
margin-top: 5px; }
.nav-group-task {
font-size: 0.9em;
list-style-type: none; }
.nav-group-task a {
color: #888; }
.main-content {
background-color: #fff;
border: 1px solid #e2e2e2;
margin-left: 246px;
position: absolute;
overflow: hidden;
padding-bottom: 60px;
top: 70px;
width: 734px; }
.main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote {
margin-bottom: 1em; }
.main-content p {
line-height: 1.8em; }
.main-content section .section:first-child {
margin-top: 0;
padding-top: 0; }
.main-content section .task-group-section .task-group:first-of-type {
padding-top: 10px; }
.main-content section .task-group-section .task-group:first-of-type .section-name {
padding-top: 15px; }
.section {
padding: 0 25px; }
.highlight {
background-color: #eee;
padding: 10px 12px;
border: 1px solid #e2e2e2;
border-radius: 4px;
overflow-x: auto; }
.declaration .highlight {
overflow-x: initial;
padding: 0 40px 40px 0;
margin-bottom: -25px;
background-color: transparent;
border: none; }
.section-name {
margin: 0;
margin-left: 18px; }
.task-group-section {
padding-left: 6px;
border-top: 1px solid #e2e2e2; }
.task-group {
padding-top: 0px; }
.task-name-container a[name]:before {
content: "";
display: block;
padding-top: 70px;
margin: -70px 0 0; }
.item {
padding-top: 8px;
width: 100%;
list-style-type: none; }
.item a[name]:before {
content: "";
display: block;
padding-top: 70px;
margin: -70px 0 0; }
.item code {
background-color: transparent;
padding: 0; }
.item .token {
padding-left: 3px;
margin-left: 15px;
font-size: 11.9px; }
.item .declaration-note {
font-size: .85em;
color: gray;
font-style: italic; }
.pointer-container {
border-bottom: 1px solid #e2e2e2;
left: -23px;
padding-bottom: 13px;
position: relative;
width: 110%; }
.pointer {
background: #f9f9f9;
border-left: 1px solid #e2e2e2;
border-top: 1px solid #e2e2e2;
height: 12px;
left: 21px;
top: -7px;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
position: absolute;
width: 12px; }
.height-container {
display: none;
left: -25px;
padding: 0 25px;
position: relative;
width: 100%;
overflow: hidden; }
.height-container .section {
background: #f9f9f9;
border-bottom: 1px solid #e2e2e2;
left: -25px;
position: relative;
width: 100%;
padding-top: 10px;
padding-bottom: 5px; }
.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: #4b8afb; }
.aside-warning {
border-left: 5px solid #ff6666; }
.aside-warning .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 #e2e2e2;
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 {
position: absolute;
bottom: 10px;
margin-left: 25px; }
#footer p {
margin: 0;
color: #aaa;
font-size: 0.8em; }
html.dash header, html.dash #breadcrumbs, html.dash .sidebar {
display: none; }
html.dash .main-content {
width: 980px;
margin-left: 0;
border: none;
width: 100%;
top: 0;
padding-bottom: 0; }
html.dash .height-container {
display: block; }
html.dash .item .token {
margin-left: 0; }
html.dash .content-wrapper {
width: auto; }
html.dash #footer {
position: static; }
Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,216 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>FoldingCell Reference</title>
<link rel="stylesheet" type="text/css" href="css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="css/highlight.css" />
<meta charset='utf-8'>
<script src="js/jquery.min.js" defer></script>
<script src="js/jazzy.js" defer></script>
</head>
<body>
<a title="FoldingCell Reference"></a>
<header>
<div class="content-wrapper">
<p><a href="index.html">FoldingCell Docs</a> (42% documented)</p>
</div>
</header>
<div class="content-wrapper">
<p id="breadcrumbs">
<a href="index.html">FoldingCell Reference</a>
<img id="carat" src="img/carat.png" />
FoldingCell Reference
</p>
</div>
<div class="content-wrapper">
<nav class="sidebar">
<ul class="nav-groups">
<li class="nav-group-name">
<a href="Classes.html">Classes</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Classes/FoldingCell.html">FoldingCell</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section>
<section class="section">
<p><img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/header.png" alt="header"></p>
<a href='#foldingcell' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h1 id='foldingcell'>FoldingCell</h1>
<p><a href="https://cocoapods.org/pods/FoldingCell"><img src="https://img.shields.io/cocoapods/p/FoldingCell.svg" alt="CocoaPods"></a>
<a href="http://cocoapods.org/pods/FoldingCell"><img src="https://img.shields.io/cocoapods/v/FoldingCell.svg" alt="CocoaPods"></a>
<a href="https://cdn.rawgit.com/Ramotion/folding-cell/master/docs/index.html"><img src="https://img.shields.io/cocoapods/metrics/doc-percent/FoldingCell.svg" alt="CocoaPods"></a>
<a href="https://github.com/Ramotion/folding-cell"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage compatible"></a>
<a href="http://twitter.com/Ramotion"><img src="https://img.shields.io/badge/Twitter-@Ramotion-blue.svg?style=flat" alt="Twitter"></a>
<a href="https://travis-ci.org/Ramotion/folding-cell"><img src="https://img.shields.io/travis/Ramotion/folding-cell.svg" alt="Travis"></a>
<a href="https://codebeat.co/projects/github-com-ramotion-folding-cell"><img src="https://codebeat.co/badges/6f67da5d-c416-4bac-9fb7-c2dc938feedc" alt="codebeat badge"></a>
<a href="https://github.com/Carthage/Carthage"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage compatible"></a></p>
<p><a href="https://dribbble.com/shots/2121350-Delivery-Card">shot on dribbble</a>:
<img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/Screenshots/folding-cell.gif" alt="Animation"></p>
<p>The <a href="https://store.ramotion.com/product/iphone-6-mockups?utm_source=gthb&amp;utm_medium=special&amp;utm_campaign=folding-cell">iPhone mockup</a> available <a href="https://store.ramotion.com/product/iphone-6-mockups?utm_source=gthb&amp;utm_medium=special&amp;utm_campaign=folding-cell">here</a>.</p>
<a href='#requirements' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='requirements'>Requirements</h2>
<ul>
<li>iOS 8.0+</li>
<li>Xcode 7.3</li>
</ul>
<a href='#installation' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='installation'>Installation</h2>
<p>Just add the FoldingCell.swift file to your project.</p>
<p>or use <a href="https://cocoapods.org">CocoaPods</a> with Podfile:
<code>ruby
pod &#39;FoldingCell&#39;, &#39;~&gt; 0.8.1&#39;
</code></p>
<p>or <a href="https://github.com/Carthage/Carthage">Carthage</a> users can simply add Mantle to their <code>Cartfile</code>:
<code>
github &quot;Ramotion/folding-cell&quot;
</code></p>
<a href='#solution' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='solution'>Solution</h2>
<p><img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/Solution.png" alt="Solution"></p>
<a href='#usage' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='usage'>Usage</h2>
<p>1) Create a new cell inheriting from <code>FoldingCell</code></p>
<p>2) Add a UIView to your cell in your storyboard or nib file, inheriting from <code>RotatedView</code>.
Connect the outlet from this view to the cell property <code>foregroundView</code>.
Add constraints from this view to the superview, as in this picture:</p>
<p><img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/1.1.png" alt="1.1"></p>
<p>(constants of constraints may be different). Connect the outlet from this top constraint to the cell property <code>foregroundViewTop</code>
. (This view will be shown when the cell is in its normal state).</p>
<p>3) Add other UIViews to your cell, connect the outlet from this view to the cell
property <code>containerView</code>. Add constraints from this view to the superview like in the picture:</p>
<p><img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/1.2.png" alt="1.2"></p>
<p>(constants of constraints may be different). Connect the outlet from this top constraint to the cell property <code>containerViewTop</code>.
(This view will be shown when the cell is opened)</p>
<p>Your result should be something like this picture:</p>
<p><img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/1.3.png" alt="1.3"></p>
<p><a href="https://vimeo.com/154954299">Demonstration adding constraints for foregroundView, containerView</a></p>
<p>4) Set <code>@IBInspectable var itemCount: NSInteger</code> property is a count of folding (it IBInspectable you can set in storyboard). range 2 or greater. Default value is 2</p>
<p>Ok, we&rsquo;ve finished configuring the cell.</p>
<p>5) Adding code to your UITableViewController</p>
<p>5.1) Add constants:
<code>swift
let kCloseCellHeight: CGFloat = *** // equal or greater foregroundView height
let kOpenCellHeight: CGFloat = *** // equal or greater containerView height
</code>
5.2) Add property</p>
<pre class="highlight swift"><code> <span class="k">var</span> <span class="nv">cellHeights</span> <span class="o">=</span> <span class="p">[</span><span class="kt">CGFloat</span><span class="p">]()</span>
</code></pre>
<pre class="highlight plaintext"><code> create in viewDidLoad:
</code></pre>
<pre class="highlight swift"><code> <span class="k">override</span> <span class="kd">func</span> <span class="nf">viewDidLoad</span><span class="p">()</span> <span class="p">{</span>
<span class="k">super</span><span class="o">.</span><span class="nf">viewDidLoad</span><span class="p">()</span>
<span class="k">for</span> <span class="n">_</span> <span class="k">in</span> <span class="mi">0</span><span class="o">...</span><span class="n">kRowsCount</span> <span class="p">{</span>
<span class="n">cellHeights</span><span class="o">.</span><span class="nf">append</span><span class="p">(</span><span class="n">kCloseCellHeight</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre>
<p>5.3) Override method:
<code>swift
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -&gt; CGFloat {
return cellHeights[indexPath.row]
}
</code></p>
<p>5.4) Added code to method:
&ldquo;` swift
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath) as! FoldingCell</p>
<pre class="highlight plaintext"><code> var duration = 0.0
if cellHeights[indexPath.row] == kCloseCellHeight { // open cell
cellHeights[indexPath.row] = kOpenCellHeight
cell.selectedAnimation(true, animated: true, completion: nil)
duration = 0.5
} else {// close cell
cellHeights[indexPath.row] = kCloseCellHeight
cell.selectedAnimation(false, animated: true, completion: nil)
duration = 1.1
}
UIView.animateWithDuration(duration, delay: 0, options: .CurveEaseOut, animations: { () -&gt; Void in
tableView.beginUpdates()
tableView.endUpdates()
}, completion: nil)
}
</code></pre>
<pre class="highlight plaintext"><code>5.5) Control if the cell is open or closed
``` swift
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if cell is FoldingCell {
let foldingCell = cell as! FoldingCell
if cellHeights![indexPath.row] == kCloseCellHeight {
foldingCell.selectedAnimation(false, animated: false, completion:nil)
} else {
foldingCell.selectedAnimation(true, animated: false, completion: nil)
}
}
}
</code></pre>
<p>6) Add this code to your new cell class
&rdquo;` swift
override func animationDuration(itemIndex:NSInteger, type:AnimationType)-&gt; NSTimeInterval {</p>
<pre class="highlight plaintext"><code> // durations count equal it itemCount
let durations = [0.33, 0.26, 0.26] // timing animation for each view
return durations[itemIndex]
}
</code></pre>
<pre class="highlight plaintext"><code>
#### if don't use storyboard and xib files
Create foregroundView and containerView from code (steps 2 - 3) look example:
[Folding-cell-programmatically](https://github.com/ober01/Folding-cell-programmatically)
## Licence
Folding cell is released under the MIT license.
See [LICENSE](./LICENSE) for details.
## About
The project maintained by [app development agency](https://ramotion.com?utm_source=gthb&amp;utm_medium=special&amp;utm_campaign=foolding-cell) [Ramotion Inc.](https://ramotion.com?utm_source=gthb&amp;utm_medium=special&amp;utm_campaign=foolding-cell)
See our other [open-source projects](https://github.com/ramotion) or [hire](https://ramotion.com?utm_source=gthb&amp;utm_medium=special&amp;utm_campaign=foolding-cell) us to design, develop, and grow your product.
[![Twitter URL](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=https://github.com/ramotion/foolding-cell)
[![Twitter Follow](https://img.shields.io/twitter/follow/ramotion.svg?style=social)](https://twitter.com/ramotion)
</code></pre>
</section>
</section>
<section id="footer">
<p>&copy; 2016 <a class="link" href="" target="_blank" rel="external">AlexKalinkin</a>. All rights reserved. (Last updated: 2016-06-15)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.5.0</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
</article>
</div>
</body>
</div>
</html>
@@ -0,0 +1,40 @@
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
}
// On doc load, toggle the URL hash discussion if present
$(document).ready(function() {
if (!window.jazzy.docset) {
var linkToHash = $('a[href="' + window.location.hash +'"]');
linkToHash.trigger("click");
}
});
// On token click, toggle its discussion and animate token.marginLeft
$(".token").click(function(event) {
if (window.jazzy.docset) {
return;
}
var link = $(this);
var animationDuration = 300;
var tokenOffset = "15px";
var original = link.css('marginLeft') == tokenOffset;
link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration);
$content = link.parent().parent().next();
$content.slideToggle(animationDuration);
// Keeps the document from jumping to the hash.
var href = $(this).attr('href');
if (history.pushState) {
history.pushState({}, '', href);
} else {
location.hash = href;
}
event.preventDefault();
});
File diff suppressed because one or more lines are too long
@@ -0,0 +1,12 @@
FoldingCell.swift
@IBOutlet weak public var containerViewTop: NSLayoutConstraint!
@IBOutlet weak public var foregroundViewTop: NSLayoutConstraint!
case Open
case Close
override public init(style: UITableViewCellStyle, reuseIdentifier: String?)
required public init?(coder aDecoder: NSCoder)
override public func awakeFromNib()
public func isAnimating()->Bool
public func animationDuration(itemIndex:NSInteger, type:AnimationType)-> NSTimeInterval
public class RotatedView: UIView
public class RotatedView : UIView
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

+216
View File
@@ -0,0 +1,216 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>FoldingCell Reference</title>
<link rel="stylesheet" type="text/css" href="css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="css/highlight.css" />
<meta charset='utf-8'>
<script src="js/jquery.min.js" defer></script>
<script src="js/jazzy.js" defer></script>
</head>
<body>
<a title="FoldingCell Reference"></a>
<header>
<div class="content-wrapper">
<p><a href="index.html">FoldingCell Docs</a> (42% documented)</p>
</div>
</header>
<div class="content-wrapper">
<p id="breadcrumbs">
<a href="index.html">FoldingCell Reference</a>
<img id="carat" src="img/carat.png" />
FoldingCell Reference
</p>
</div>
<div class="content-wrapper">
<nav class="sidebar">
<ul class="nav-groups">
<li class="nav-group-name">
<a href="Classes.html">Classes</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Classes/FoldingCell.html">FoldingCell</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section>
<section class="section">
<p><img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/header.png" alt="header"></p>
<a href='#foldingcell' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h1 id='foldingcell'>FoldingCell</h1>
<p><a href="https://cocoapods.org/pods/FoldingCell"><img src="https://img.shields.io/cocoapods/p/FoldingCell.svg" alt="CocoaPods"></a>
<a href="http://cocoapods.org/pods/FoldingCell"><img src="https://img.shields.io/cocoapods/v/FoldingCell.svg" alt="CocoaPods"></a>
<a href="https://cdn.rawgit.com/Ramotion/folding-cell/master/docs/index.html"><img src="https://img.shields.io/cocoapods/metrics/doc-percent/FoldingCell.svg" alt="CocoaPods"></a>
<a href="https://github.com/Ramotion/folding-cell"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage compatible"></a>
<a href="http://twitter.com/Ramotion"><img src="https://img.shields.io/badge/Twitter-@Ramotion-blue.svg?style=flat" alt="Twitter"></a>
<a href="https://travis-ci.org/Ramotion/folding-cell"><img src="https://img.shields.io/travis/Ramotion/folding-cell.svg" alt="Travis"></a>
<a href="https://codebeat.co/projects/github-com-ramotion-folding-cell"><img src="https://codebeat.co/badges/6f67da5d-c416-4bac-9fb7-c2dc938feedc" alt="codebeat badge"></a>
<a href="https://github.com/Carthage/Carthage"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage compatible"></a></p>
<p><a href="https://dribbble.com/shots/2121350-Delivery-Card">shot on dribbble</a>:
<img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/Screenshots/folding-cell.gif" alt="Animation"></p>
<p>The <a href="https://store.ramotion.com/product/iphone-6-mockups?utm_source=gthb&amp;utm_medium=special&amp;utm_campaign=folding-cell">iPhone mockup</a> available <a href="https://store.ramotion.com/product/iphone-6-mockups?utm_source=gthb&amp;utm_medium=special&amp;utm_campaign=folding-cell">here</a>.</p>
<a href='#requirements' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='requirements'>Requirements</h2>
<ul>
<li>iOS 8.0+</li>
<li>Xcode 7.3</li>
</ul>
<a href='#installation' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='installation'>Installation</h2>
<p>Just add the FoldingCell.swift file to your project.</p>
<p>or use <a href="https://cocoapods.org">CocoaPods</a> with Podfile:
<code>ruby
pod &#39;FoldingCell&#39;, &#39;~&gt; 0.8.1&#39;
</code></p>
<p>or <a href="https://github.com/Carthage/Carthage">Carthage</a> users can simply add Mantle to their <code>Cartfile</code>:
<code>
github &quot;Ramotion/folding-cell&quot;
</code></p>
<a href='#solution' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='solution'>Solution</h2>
<p><img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/Solution.png" alt="Solution"></p>
<a href='#usage' class='anchor' aria-hidden=true><span class="header-anchor"></span></a><h2 id='usage'>Usage</h2>
<p>1) Create a new cell inheriting from <code>FoldingCell</code></p>
<p>2) Add a UIView to your cell in your storyboard or nib file, inheriting from <code>RotatedView</code>.
Connect the outlet from this view to the cell property <code>foregroundView</code>.
Add constraints from this view to the superview, as in this picture:</p>
<p><img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/1.1.png" alt="1.1"></p>
<p>(constants of constraints may be different). Connect the outlet from this top constraint to the cell property <code>foregroundViewTop</code>
. (This view will be shown when the cell is in its normal state).</p>
<p>3) Add other UIViews to your cell, connect the outlet from this view to the cell
property <code>containerView</code>. Add constraints from this view to the superview like in the picture:</p>
<p><img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/1.2.png" alt="1.2"></p>
<p>(constants of constraints may be different). Connect the outlet from this top constraint to the cell property <code>containerViewTop</code>.
(This view will be shown when the cell is opened)</p>
<p>Your result should be something like this picture:</p>
<p><img src="https://raw.githubusercontent.com/Ramotion/folding-cell/master/Tutorial-resources/1.3.png" alt="1.3"></p>
<p><a href="https://vimeo.com/154954299">Demonstration adding constraints for foregroundView, containerView</a></p>
<p>4) Set <code>@IBInspectable var itemCount: NSInteger</code> property is a count of folding (it IBInspectable you can set in storyboard). range 2 or greater. Default value is 2</p>
<p>Ok, we&rsquo;ve finished configuring the cell.</p>
<p>5) Adding code to your UITableViewController</p>
<p>5.1) Add constants:
<code>swift
let kCloseCellHeight: CGFloat = *** // equal or greater foregroundView height
let kOpenCellHeight: CGFloat = *** // equal or greater containerView height
</code>
5.2) Add property</p>
<pre class="highlight swift"><code> <span class="k">var</span> <span class="nv">cellHeights</span> <span class="o">=</span> <span class="p">[</span><span class="kt">CGFloat</span><span class="p">]()</span>
</code></pre>
<pre class="highlight plaintext"><code> create in viewDidLoad:
</code></pre>
<pre class="highlight swift"><code> <span class="k">override</span> <span class="kd">func</span> <span class="nf">viewDidLoad</span><span class="p">()</span> <span class="p">{</span>
<span class="k">super</span><span class="o">.</span><span class="nf">viewDidLoad</span><span class="p">()</span>
<span class="k">for</span> <span class="n">_</span> <span class="k">in</span> <span class="mi">0</span><span class="o">...</span><span class="n">kRowsCount</span> <span class="p">{</span>
<span class="n">cellHeights</span><span class="o">.</span><span class="nf">append</span><span class="p">(</span><span class="n">kCloseCellHeight</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre>
<p>5.3) Override method:
<code>swift
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -&gt; CGFloat {
return cellHeights[indexPath.row]
}
</code></p>
<p>5.4) Added code to method:
&ldquo;` swift
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath) as! FoldingCell</p>
<pre class="highlight plaintext"><code> var duration = 0.0
if cellHeights[indexPath.row] == kCloseCellHeight { // open cell
cellHeights[indexPath.row] = kOpenCellHeight
cell.selectedAnimation(true, animated: true, completion: nil)
duration = 0.5
} else {// close cell
cellHeights[indexPath.row] = kCloseCellHeight
cell.selectedAnimation(false, animated: true, completion: nil)
duration = 1.1
}
UIView.animateWithDuration(duration, delay: 0, options: .CurveEaseOut, animations: { () -&gt; Void in
tableView.beginUpdates()
tableView.endUpdates()
}, completion: nil)
}
</code></pre>
<pre class="highlight plaintext"><code>5.5) Control if the cell is open or closed
``` swift
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if cell is FoldingCell {
let foldingCell = cell as! FoldingCell
if cellHeights![indexPath.row] == kCloseCellHeight {
foldingCell.selectedAnimation(false, animated: false, completion:nil)
} else {
foldingCell.selectedAnimation(true, animated: false, completion: nil)
}
}
}
</code></pre>
<p>6) Add this code to your new cell class
&rdquo;` swift
override func animationDuration(itemIndex:NSInteger, type:AnimationType)-&gt; NSTimeInterval {</p>
<pre class="highlight plaintext"><code> // durations count equal it itemCount
let durations = [0.33, 0.26, 0.26] // timing animation for each view
return durations[itemIndex]
}
</code></pre>
<pre class="highlight plaintext"><code>
#### if don't use storyboard and xib files
Create foregroundView and containerView from code (steps 2 - 3) look example:
[Folding-cell-programmatically](https://github.com/ober01/Folding-cell-programmatically)
## Licence
Folding cell is released under the MIT license.
See [LICENSE](./LICENSE) for details.
## About
The project maintained by [app development agency](https://ramotion.com?utm_source=gthb&amp;utm_medium=special&amp;utm_campaign=foolding-cell) [Ramotion Inc.](https://ramotion.com?utm_source=gthb&amp;utm_medium=special&amp;utm_campaign=foolding-cell)
See our other [open-source projects](https://github.com/ramotion) or [hire](https://ramotion.com?utm_source=gthb&amp;utm_medium=special&amp;utm_campaign=foolding-cell) us to design, develop, and grow your product.
[![Twitter URL](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=https://github.com/ramotion/foolding-cell)
[![Twitter Follow](https://img.shields.io/twitter/follow/ramotion.svg?style=social)](https://twitter.com/ramotion)
</code></pre>
</section>
</section>
<section id="footer">
<p>&copy; 2016 <a class="link" href="" target="_blank" rel="external">AlexKalinkin</a>. All rights reserved. (Last updated: 2016-06-15)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.5.0</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
</section>
</article>
</div>
</body>
</div>
</html>
+40
View File
@@ -0,0 +1,40 @@
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
}
// On doc load, toggle the URL hash discussion if present
$(document).ready(function() {
if (!window.jazzy.docset) {
var linkToHash = $('a[href="' + window.location.hash +'"]');
linkToHash.trigger("click");
}
});
// On token click, toggle its discussion and animate token.marginLeft
$(".token").click(function(event) {
if (window.jazzy.docset) {
return;
}
var link = $(this);
var animationDuration = 300;
var tokenOffset = "15px";
var original = link.css('marginLeft') == tokenOffset;
link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration);
$content = link.parent().parent().next();
$content.slideToggle(animationDuration);
// Keeps the document from jumping to the hash.
var href = $(this).attr('href');
if (history.pushState) {
history.pushState({}, '', href);
} else {
location.hash = href;
}
event.preventDefault();
});
Vendored Executable
+4
View File
File diff suppressed because one or more lines are too long
+12
View File
@@ -0,0 +1,12 @@
FoldingCell.swift
@IBOutlet weak public var containerViewTop: NSLayoutConstraint!
@IBOutlet weak public var foregroundViewTop: NSLayoutConstraint!
case Open
case Close
override public init(style: UITableViewCellStyle, reuseIdentifier: String?)
required public init?(coder aDecoder: NSCoder)
override public func awakeFromNib()
public func isAnimating()->Bool
public func animationDuration(itemIndex:NSInteger, type:AnimationType)-> NSTimeInterval
public class RotatedView: UIView
public class RotatedView : UIView
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB