Compare commits

..
7 Commits
Author SHA1 Message Date
i.kolpachkov 026283a303 bump cocoapods version, update readme file 2018-01-16 13:09:21 +03:00
i.kolpachkov 2f3c7e32bb code cleanup, improve layout, iphoneX adjustments 2018-01-16 13:05:10 +03:00
i.kolpachkov 7ac7564fff swift 4.0 migration, project cleanup 2018-01-15 19:24:11 +03:00
Juri Vasylenko f0ba09cc80 Update README.md 2017-11-11 18:24:32 +03:00
Travis CI 1ca20427a7 reorganize readme 2017-07-28 15:39:15 +03:00
Alex f7dfe38777 Update README.md 2017-06-27 11:48:39 +03:00
Alex K db3165009d update podspec 2017-05-25 10:23:23 +03:00
14 changed files with 112 additions and 290 deletions
@@ -13,7 +13,6 @@
848596311CF585F3000BCC74 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8485962F1CF585F3000BCC74 /* Main.storyboard */; };
848596331CF585F3000BCC74 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 848596321CF585F3000BCC74 /* Assets.xcassets */; };
848596361CF585F3000BCC74 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 848596341CF585F3000BCC74 /* LaunchScreen.storyboard */; };
848596411CF585F3000BCC74 /* DemoExpandingCollectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848596401CF585F3000BCC74 /* DemoExpandingCollectionTests.swift */; };
8485965A1CF586F7000BCC74 /* DemoTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848596541CF586F7000BCC74 /* DemoTableViewController.swift */; };
8485965B1CF586F7000BCC74 /* DemoCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848596571CF586F7000BCC74 /* DemoCollectionViewCell.swift */; };
8485965C1CF586F7000BCC74 /* DemoCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 848596581CF586F7000BCC74 /* DemoCollectionViewCell.xib */; };
@@ -49,13 +48,6 @@
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
8485963D1CF585F3000BCC74 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 848596201CF585F3000BCC74 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 848596271CF585F3000BCC74;
remoteInfo = DemoExpandingCollection;
};
8499D8191D001B82004B5B37 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 848596201CF585F3000BCC74 /* Project object */;
@@ -88,9 +80,6 @@
848596321CF585F3000BCC74 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
848596351CF585F3000BCC74 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
848596371CF585F3000BCC74 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8485963C1CF585F3000BCC74 /* DemoExpandingCollectionTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoExpandingCollectionTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
848596401CF585F3000BCC74 /* DemoExpandingCollectionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoExpandingCollectionTests.swift; sourceTree = "<group>"; };
848596421CF585F3000BCC74 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
848596541CF586F7000BCC74 /* DemoTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DemoTableViewController.swift; sourceTree = "<group>"; };
848596571CF586F7000BCC74 /* DemoCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DemoCollectionViewCell.swift; sourceTree = "<group>"; };
848596581CF586F7000BCC74 /* DemoCollectionViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DemoCollectionViewCell.xib; sourceTree = "<group>"; };
@@ -123,13 +112,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
848596391CF585F3000BCC74 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
8499D8101D001B82004B5B37 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -169,7 +151,6 @@
isa = PBXGroup;
children = (
8485962A1CF585F3000BCC74 /* DemoExpandingCollection */,
8485963F1CF585F3000BCC74 /* DemoExpandingCollectionTests */,
8499D8151D001B82004B5B37 /* ExpandingCollection */,
848596291CF585F3000BCC74 /* Products */,
);
@@ -179,7 +160,6 @@
isa = PBXGroup;
children = (
848596281CF585F3000BCC74 /* DemoExpandingCollection.app */,
8485963C1CF585F3000BCC74 /* DemoExpandingCollectionTests.xctest */,
8499D8141D001B82004B5B37 /* ExpandingCollection.framework */,
);
name = Products;
@@ -202,15 +182,6 @@
path = DemoExpandingCollection;
sourceTree = "<group>";
};
8485963F1CF585F3000BCC74 /* DemoExpandingCollectionTests */ = {
isa = PBXGroup;
children = (
848596401CF585F3000BCC74 /* DemoExpandingCollectionTests.swift */,
848596421CF585F3000BCC74 /* Info.plist */,
);
path = DemoExpandingCollectionTests;
sourceTree = "<group>";
};
848596521CF586E0000BCC74 /* ViewControllers */ = {
isa = PBXGroup;
children = (
@@ -445,24 +416,6 @@
productReference = 848596281CF585F3000BCC74 /* DemoExpandingCollection.app */;
productType = "com.apple.product-type.application";
};
8485963B1CF585F3000BCC74 /* DemoExpandingCollectionTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 848596481CF585F3000BCC74 /* Build configuration list for PBXNativeTarget "DemoExpandingCollectionTests" */;
buildPhases = (
848596381CF585F3000BCC74 /* Sources */,
848596391CF585F3000BCC74 /* Frameworks */,
8485963A1CF585F3000BCC74 /* Resources */,
);
buildRules = (
);
dependencies = (
8485963E1CF585F3000BCC74 /* PBXTargetDependency */,
);
name = DemoExpandingCollectionTests;
productName = DemoExpandingCollectionTests;
productReference = 8485963C1CF585F3000BCC74 /* DemoExpandingCollectionTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
8499D8131D001B82004B5B37 /* ExpandingCollection */ = {
isa = PBXNativeTarget;
buildConfigurationList = 8499D81F1D001B82004B5B37 /* Build configuration list for PBXNativeTarget "ExpandingCollection" */;
@@ -488,23 +441,18 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0730;
LastUpgradeCheck = 0800;
LastUpgradeCheck = 0920;
ORGANIZATIONNAME = "Alex K.";
TargetAttributes = {
848596271CF585F3000BCC74 = {
CreatedOnToolsVersion = 7.3.1;
DevelopmentTeam = 34MUF9YXTA;
LastSwiftMigration = 0800;
};
8485963B1CF585F3000BCC74 = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 0800;
TestTargetID = 848596271CF585F3000BCC74;
LastSwiftMigration = 0920;
};
8499D8131D001B82004B5B37 = {
CreatedOnToolsVersion = 7.3.1;
DevelopmentTeam = LEAZS7L33U;
LastSwiftMigration = 0800;
LastSwiftMigration = 0920;
};
};
};
@@ -522,7 +470,6 @@
projectRoot = "";
targets = (
848596271CF585F3000BCC74 /* DemoExpandingCollection */,
8485963B1CF585F3000BCC74 /* DemoExpandingCollectionTests */,
8499D8131D001B82004B5B37 /* ExpandingCollection */,
);
};
@@ -540,13 +487,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
8485963A1CF585F3000BCC74 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
8499D8121D001B82004B5B37 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -601,14 +541,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
848596381CF585F3000BCC74 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
848596411CF585F3000BCC74 /* DemoExpandingCollectionTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
8499D80F1D001B82004B5B37 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -630,11 +562,6 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
8485963E1CF585F3000BCC74 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 848596271CF585F3000BCC74 /* DemoExpandingCollection */;
targetProxy = 8485963D1CF585F3000BCC74 /* PBXContainerItemProxy */;
};
8499D81A1D001B82004B5B37 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 8499D8131D001B82004B5B37 /* ExpandingCollection */;
@@ -671,14 +598,20 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -718,14 +651,20 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -764,7 +703,8 @@
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.dev1;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
SWIFT_VERSION = 3.0;
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
SWIFT_VERSION = 4.0;
};
name = Debug;
};
@@ -782,33 +722,8 @@
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.dev1;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
SWIFT_VERSION = 3.0;
};
name = Release;
};
848596491CF585F3000BCC74 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
INFOPLIST_FILE = DemoExpandingCollectionTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.DemoExpandingCollectionTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DemoExpandingCollection.app/DemoExpandingCollection";
};
name = Debug;
};
8485964A1CF585F3000BCC74 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
INFOPLIST_FILE = DemoExpandingCollectionTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.DemoExpandingCollectionTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DemoExpandingCollection.app/DemoExpandingCollection";
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
SWIFT_VERSION = 4.0;
};
name = Release;
};
@@ -829,7 +744,8 @@
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.dev;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
@@ -853,7 +769,8 @@
PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.dev;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
@@ -881,15 +798,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
848596481CF585F3000BCC74 /* Build configuration list for PBXNativeTarget "DemoExpandingCollectionTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
848596491CF585F3000BCC74 /* Debug */,
8485964A1CF585F3000BCC74 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
8499D81F1D001B82004B5B37 /* Build configuration list for PBXNativeTarget "ExpandingCollection" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0800"
LastUpgradeVersion = "0920"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -26,6 +26,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
@@ -36,6 +37,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
@@ -18,23 +18,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
configureNavigationTabBar()
return true
}
func applicationWillResignActive(_ application: UIApplication) {
}
func applicationDidEnterBackground(_ application: UIApplication) {
}
func applicationWillEnterForeground(_ application: UIApplication) {
}
func applicationDidBecomeActive(_ application: UIApplication) {
}
func applicationWillTerminate(_ application: UIApplication) {
}
}
extension AppDelegate {
@@ -50,8 +33,8 @@ extension AppDelegate {
shadow.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.1)
UINavigationBar.appearance().titleTextAttributes = [
NSForegroundColorAttributeName : UIColor.white,
NSShadowAttributeName: shadow
NSAttributedStringKey.foregroundColor : UIColor.white,
NSAttributedStringKey.shadow: shadow
]
}
}
@@ -39,6 +39,11 @@
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
},
{
"idiom" : "ios-marketing",
"size" : "1024x1024",
"scale" : "1x"
}
],
"info" : {
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12120" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="L1n-Ia-Jrw">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="L1n-Ia-Jrw">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12088"/>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@@ -34,9 +35,9 @@
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="mRg-Mx-OVI" firstAttribute="top" secondItem="Irl-Rb-fcB" secondAttribute="bottom" constant="20" id="2LM-iO-324"/>
<constraint firstItem="o88-Ae-QCA" firstAttribute="top" secondItem="CpK-wn-s3i" secondAttribute="bottom" constant="-44" id="MHx-PV-wBs"/>
<constraint firstItem="o88-Ae-QCA" firstAttribute="top" secondItem="CO1-du-RsN" secondAttribute="top" id="MHx-PV-wBs"/>
<constraint firstAttribute="trailing" secondItem="o88-Ae-QCA" secondAttribute="trailing" id="Xcv-FC-DFw"/>
<constraint firstItem="mRg-Mx-OVI" firstAttribute="top" secondItem="o88-Ae-QCA" secondAttribute="bottom" id="aWe-c0-hwO"/>
<constraint firstAttribute="bottom" secondItem="o88-Ae-QCA" secondAttribute="bottom" id="aWe-c0-hwO"/>
<constraint firstItem="o88-Ae-QCA" firstAttribute="leading" secondItem="CO1-du-RsN" secondAttribute="leading" id="sd9-mZ-FXM"/>
<constraint firstItem="Irl-Rb-fcB" firstAttribute="centerX" secondItem="CO1-du-RsN" secondAttribute="centerX" id="yzg-tR-vdV"/>
</constraints>
@@ -62,7 +63,7 @@
<constraint firstItem="92b-RV-q6w" firstAttribute="centerY" secondItem="U0J-H7-fvX" secondAttribute="centerY" id="qaL-Bm-FyO"/>
</constraints>
</view>
<barButtonItem key="rightBarButtonItem" title="Item" id="mbm-hT-lYD" customClass="AnimatingBarButton" customModule="DemoExpandingCollection" customModuleProvider="target">
<barButtonItem key="rightBarButtonItem" title="Item" image="locationButton" id="mbm-hT-lYD" customClass="AnimatingBarButton" customModule="DemoExpandingCollection" customModuleProvider="target">
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="normalImageName" value="locationButton"/>
<userDefinedRuntimeAttribute type="string" keyPath="selectedImageName" value="CloseButton"/>
@@ -74,8 +75,6 @@
</navigationItem>
<connections>
<outlet property="pageLabel" destination="Irl-Rb-fcB" id="oUZ-x9-PkD"/>
<outlet property="titleImageView" destination="92b-RV-q6w" id="3lS-Ot-c9A"/>
<outlet property="titleImageViewXConstraint" destination="kLZ-Jr-wTP" id="cFl-I4-nzg"/>
<segue destination="7RW-i0-HfN" kind="show" identifier="NoName" id="enc-PY-spo"/>
</connections>
</viewController>
@@ -90,7 +89,7 @@
<toolbarItems/>
<nil key="simulatedStatusBarMetrics"/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="5hs-Ir-kRn">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<rect key="frame" x="0.0" y="20" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>
@@ -131,7 +130,7 @@
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="La Crescenta-Montrose, CA91020 Glendale
NO. 7911847" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xh7-la-W1r">
<rect key="frame" x="40" y="49" width="327" height="26.5"/>
<rect key="frame" x="40" y="49" width="319" height="26.5"/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="0.49803921568627452" green="0.51764705882352935" blue="0.53725490196078429" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
@@ -188,7 +187,7 @@
</subviews>
</stackView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumScaleFactor="0.80000000000000004" translatesAutoresizingMaskIntoConstraints="NO" id="cWC-7U-c6U">
<rect key="frame" x="0.0" y="40" width="284.5" height="60"/>
<rect key="frame" x="0.0" y="40" width="0.0" height="60"/>
<constraints>
<constraint firstAttribute="height" constant="60" id="Aal-gs-pRU"/>
</constraints>
@@ -250,7 +249,7 @@
</subviews>
</stackView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumScaleFactor="0.80000000000000004" translatesAutoresizingMaskIntoConstraints="NO" id="Rj6-os-v8s">
<rect key="frame" x="0.0" y="40" width="284.5" height="60"/>
<rect key="frame" x="0.0" y="40" width="0.0" height="60"/>
<constraints>
<constraint firstAttribute="height" constant="60" id="X0h-Mf-l6D"/>
</constraints>
@@ -312,7 +311,7 @@
</subviews>
</stackView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumScaleFactor="0.80000000000000004" translatesAutoresizingMaskIntoConstraints="NO" id="guA-2J-wB7">
<rect key="frame" x="0.0" y="40" width="284.5" height="60"/>
<rect key="frame" x="0.0" y="40" width="0.0" height="60"/>
<constraints>
<constraint firstAttribute="height" constant="60" id="eVB-K1-R8b"/>
</constraints>
@@ -374,7 +373,7 @@
</subviews>
</stackView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumScaleFactor="0.80000000000000004" translatesAutoresizingMaskIntoConstraints="NO" id="v80-2F-1zn">
<rect key="frame" x="0.0" y="40" width="284.5" height="60"/>
<rect key="frame" x="0.0" y="40" width="0.0" height="60"/>
<constraints>
<constraint firstAttribute="height" constant="60" id="nvf-wL-GDB"/>
</constraints>
@@ -436,7 +435,7 @@
</subviews>
</stackView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumScaleFactor="0.80000000000000004" translatesAutoresizingMaskIntoConstraints="NO" id="qtA-cn-iTh">
<rect key="frame" x="0.0" y="40" width="284.5" height="60"/>
<rect key="frame" x="0.0" y="40" width="0.0" height="60"/>
<constraints>
<constraint firstAttribute="height" constant="60" id="d7O-23-tUP"/>
</constraints>
@@ -468,10 +467,10 @@
<autoresizingMask key="autoresizingMask"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" translatesAutoresizingMaskIntoConstraints="NO" id="dHy-no-3dG">
<rect key="frame" x="40" y="15" width="295" height="100"/>
<rect key="frame" x="0.0" y="15" width="0.0" height="100"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="qg6-9G-buN">
<rect key="frame" x="0.0" y="0.0" width="295" height="40"/>
<rect key="frame" x="0.0" y="0.0" width="0.0" height="40"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="face1" translatesAutoresizingMaskIntoConstraints="NO" id="d7e-fT-v2a">
<rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
@@ -481,24 +480,24 @@
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="Amada Iin" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dsG-zh-ZDw">
<rect key="frame" x="50" y="11" width="168" height="18"/>
<rect key="frame" x="0.0" y="11" width="0.0" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="0.41960784309999999" green="0.41960784309999999" blue="0.41960784309999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="FEB 14th" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="37E-Ih-nze">
<rect key="frame" x="228" y="14" width="43" height="12"/>
<rect key="frame" x="0.0" y="14" width="43" height="12"/>
<fontDescription key="fontDescription" type="system" pointSize="10"/>
<color key="textColor" red="0.76470588240000004" green="0.76470588240000004" blue="0.76470588240000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="heand" translatesAutoresizingMaskIntoConstraints="NO" id="I3D-43-QUr">
<rect key="frame" x="281" y="13.5" width="14" height="13"/>
<rect key="frame" x="0.0" y="13.5" width="14" height="13"/>
</imageView>
</subviews>
</stackView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumScaleFactor="0.80000000000000004" translatesAutoresizingMaskIntoConstraints="NO" id="uhH-HH-oP4">
<rect key="frame" x="0.0" y="40" width="284.5" height="60"/>
<rect key="frame" x="0.0" y="40" width="0.0" height="60"/>
<constraints>
<constraint firstAttribute="height" constant="60" id="kTR-Ho-zi0"/>
</constraints>
@@ -559,10 +558,6 @@
</barButtonItem>
</navigationItem>
<simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
<connections>
<outlet property="titleImageView" destination="a24-t2-9jd" id="dZR-2A-N8b"/>
<outlet property="titleImageViewXConstraint" destination="sdW-OO-2BS" id="huK-Bc-7RX"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="koT-TQ-RUs" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
@@ -576,8 +571,10 @@
<image name="face1" width="40" height="39"/>
<image name="face2" width="40" height="39"/>
<image name="heand" width="14" height="13"/>
<image name="locationButton" width="20" height="20"/>
<image name="map" width="375" height="124"/>
<image name="searchIcon" width="20" height="20"/>
<image name="stars" width="77" height="11"/>
</resources>
<color key="tintColor" red="0.97429201227993889" green="0.97273087832317329" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</document>
@@ -10,7 +10,7 @@ import UIKit
extension UICollectionView {
func getReusableCellWithIdentifier<T: UICollectionViewCell>(_ indexPath: IndexPath) -> T where T: CollectionViewCellIdentifiable {
func getReusableCellWithIdentifier<T: UICollectionViewCell>(_ indexPath: IndexPath) -> T {
guard let cell = dequeueReusableCell(withReuseIdentifier: T.cellIdentifier, for: indexPath) as? T else {
fatalError("Couldn't instantiate view controller with identifier \(T.cellIdentifier) ")
}
@@ -22,7 +22,7 @@ extension UIStoryboard {
return UIStoryboard(name: storyboard.rawValue, bundle: bundle)
}
func instantiateViewController<T: UIViewController>() -> T where T: StoryboardIdentifiable {
func instantiateViewController<T: UIViewController>() -> T {
guard let viewController = self.instantiateViewController(withIdentifier: T.storyboardIdentifier) as? T else {
fatalError("Couldn't instantiate view controller with identifier \(T.storyboardIdentifier) ")
}
@@ -16,24 +16,10 @@ class DemoTableViewController: ExpandingTableViewController {
configureNavBar()
let image1 = Asset.backgroundImage.image
tableView.backgroundView = UIImageView(image: image1)
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = .never
}
}
@IBOutlet weak var titleImageView: UIImageView!
@IBOutlet weak var titleImageViewXConstraint: NSLayoutConstraint!
}
// MARK: - Lifecycle
extension DemoTableViewController {
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
guard let titleView = navigationItem.titleView else { return }
let center = UIScreen.main.bounds.midX
let diff = center - titleView.frame.midX
titleImageViewXConstraint.constant = diff
}
}
// MARK: Helpers
@@ -15,9 +15,6 @@ class DemoViewController: ExpandingViewController {
fileprivate let items: [ItemInfo] = [("item0", "Boston"),("item1", "New York"),("item2", "San Francisco"),("item3", "Washington")]
@IBOutlet weak var pageLabel: UILabel!
@IBOutlet weak var titleImageView: UIImageView!
@IBOutlet weak var titleImageViewXConstraint: NSLayoutConstraint!
}
// MARK: - Lifecycle 🌎
@@ -32,15 +29,6 @@ extension DemoViewController {
addGesture(to: collectionView!)
configureNavBar()
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
guard let titleView = navigationItem.titleView else { return }
let center = UIScreen.main.bounds.midX
let diff = center - titleView.frame.midX
titleImageViewXConstraint.constant = diff
}
}
// MARK: Helpers
@@ -83,7 +71,7 @@ extension DemoViewController {
view.addGestureRecognizer(downGesture)
}
func swipeHandler(_ sender: UISwipeGestureRecognizer) {
@objc func swipeHandler(_ sender: UISwipeGestureRecognizer) {
let indexPath = IndexPath(row: currentIndex, section: 0)
guard let cell = collectionView?.cellForItem(at: indexPath) as? DemoCollectionViewCell else { return }
// double swipe Up transition
@@ -8,13 +8,22 @@
import UIKit
fileprivate final class CustomView: UIView {
var onLayoutSubviews: () -> Void = { }
override func layoutSubviews() {
super.layoutSubviews()
onLayoutSubviews()
}
}
class AnimatingBarButton: UIBarButtonItem, Rotatable {
@IBInspectable var normalImageName: String = ""
@IBInspectable var selectedImageName: String = ""
@IBInspectable var duration: Double = 1
let normalView = UIImageView(frame: .zero)
let selectedView = UIImageView(frame: .zero)
}
@@ -25,10 +34,9 @@ extension AnimatingBarButton {
override func awakeFromNib() {
super.awakeFromNib()
customView = UIView(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
// customView?.backgroundColor = .redColor()
configurateImageViews()
let view = CustomView(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
view.onLayoutSubviews = {[weak self] in self?.configurateImageViews() }
customView = view
}
}
@@ -54,35 +62,24 @@ extension AnimatingBarButton {
configureImageView(selectedView, imageName: selectedImageName)
selectedView.alpha = 0
// normalView.hidden = true
}
fileprivate func configureImageView(_ imageView: UIImageView, imageName: String) {
guard let customView = customView else { return }
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.image = UIImage(named: imageName)
guard let image = UIImage(named: imageName)?.withRenderingMode(UIImageRenderingMode.alwaysTemplate) else { return }
imageView.image = image
imageView.contentMode = .scaleAspectFit
// imageView.backgroundColor = .greenColor()
imageView.tintColor = tintColor
// imageView.layer.anchorPoint = CGPoint(x: 0.5, y: 0.5)
imageView.layer.shadowColor = UIColor.black.cgColor
imageView.layer.shadowRadius = 0.6
imageView.layer.shadowOffset = CGSize(width: 0, height: 1.5)
imageView.layer.shadowOpacity = 0.3
let x = (customView.bounds.size.width - image.size.width)/2 + 12
let y = (customView.bounds.size.height - image.size.height)/2
imageView.frame = CGRect(origin: CGPoint(x: x, y: y), size: image.size)
customView.addSubview(imageView)
// add constraints
[(NSLayoutAttribute.centerX, 12), (.centerY, -1)].forEach { info in
(customView, imageView) >>>- {
$0.attribute = info.0
$0.constant = CGFloat(info.1)
return
}
}
[NSLayoutAttribute.height, .width].forEach { attribute in
imageView >>>- {
$0.attribute = attribute
$0.constant = 20
return
}
}
}
}
@@ -1,35 +0,0 @@
//
// DemoExpandingCollectionTests.swift
// DemoExpandingCollectionTests
//
// Created by Alex K. on 25/05/16.
// Copyright © 2016 Alex K. All rights reserved.
//
import XCTest
@testable import DemoExpandingCollection
class DemoExpandingCollectionTests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testExample() {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() {
// This is an example of a performance test case.
measure {
// Put the code you want to measure the time of here.
}
}
}
@@ -1,24 +0,0 @@
<?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>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>
+26 -11
View File
@@ -1,31 +1,33 @@
[![header](https://raw.githubusercontent.com/Ramotion/expanding-collection/master/header.png)](https://business.ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=expanding-collection-logo)
![header](./header.png)
![animation](./preview.gif)
# expanding-collection
[![Twitter](https://img.shields.io/badge/Twitter-@Ramotion-blue.svg?style=flat)](http://twitter.com/Ramotion)
[![CocoaPods](https://img.shields.io/cocoapods/p/expanding-collection.svg)](https://cocoapods.org/pods/expanding-collection)
[![CocoaPods](https://img.shields.io/cocoapods/v/expanding-collection.svg)](http://cocoapods.org/pods/expanding-collection)
[![CocoaPods](https://img.shields.io/cocoapods/metrics/doc-percent/expanding-collection.svg)](https://cdn.rawgit.com/Ramotion/expanding-collection/master/docs/index.html)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Ramotion/expanding-collection)
[![Travis](https://travis-ci.org/Ramotion/expanding-collection.svg?branch=master)](https://travis-ci.org/Ramotion/expanding-collection)
[![codebeat badge](https://codebeat.co/badges/6a009992-5bf2-4730-aa35-f3b20ce7693d)](https://codebeat.co/projects/github-com-ramotion-expanding-collection)
# Check this library on other platforms:
<a href="https://github.com/Ramotion/expanding-collection-android">
<img src="https://github.com/ramotion/navigation-stack/raw/master/Android_Java@2x.png" width="178" height="81"></a>
## 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?**
We specialize in the designing and coding of custom UI for Mobile Apps and Websites.<br>
<a href="https://business.ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=expanding-collection-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>
**Looking for developers for your project?**<br>
This project is maintained by Ramotion, Inc. We specialize in the designing and coding of custom UI for Mobile Apps and Websites.
<a href="https://ramotion.com/?utm_source=gthb&utm_medium=special&utm_campaign=expanding-collection-contact-us/#Get_in_Touch">
<img src="https://github.com/ramotion/gliding-collection/raw/master/contact_our_team@2x.png" width="187" height="34"></a> <br>
[![Animation](https://raw.githubusercontent.com/Ramotion/expanding-collection/master/preview.gif)](https://dribbble.com/shots/2741477-iOS-Expanding-Collection-Open-Source)
The [iPhone mockup](https://store.ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=expanding-collection) available [here](https://store.ramotion.com?utm_source=gthb&utm_medium=special&utm_campaign=expanding-collection).
## Try this UI control in action
<a href="https://itunes.apple.com/app/apple-store/id1182360240?pt=550053&ct=gthb-expanding-collection&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 9.0+
@@ -37,6 +39,8 @@ Just add the Source folder to your project.
or use [CocoaPods](https://cocoapods.org) with Podfile:
``` ruby
pod 'expanding-collection', '~> 1.1.2' swift 4
pod 'expanding-collection', '~> 1.0.3' swift 3
pod 'expanding-collection', '~> 0.3.2' swift 2
@@ -172,7 +176,18 @@ override func viewDidLoad() {
Expanding collection is released under the MIT license.
See [LICENSE](./LICENSE) for details.
## Follow us
<br>
# Get the Showroom App for iOS to give it a try
Try this UI component and more like this in our iOS app. Contact us if interested.
<a href="https://itunes.apple.com/app/apple-store/id1182360240?pt=550053&ct=expanding-collection&mt=8" >
<img src="https://github.com/ramotion/gliding-collection/raw/master/app_store@2x.png" width="117" height="34"></a>
<a href="https://ramotion.com/?utm_source=gthb&utm_medium=special&utm_campaign=expanding-collection-contact-us/#Get_in_Touch">
<img src="https://github.com/ramotion/gliding-collection/raw/master/contact_our_team@2x.png" width="187" height="34"></a>
<br>
<br>
Follow us for the latest updates<br>
[![Twitter URL](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=https://github.com/ramotion/expanding-collection)
[![Twitter Follow](https://img.shields.io/twitter/follow/ramotion.svg?style=social)](https://twitter.com/ramotion)
+1 -1
View File
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'expanding-collection'
s.version = '1.1.0'
s.version = '1.1.2'
s.summary = 'Transition animtion from CollectionView to TableView'
s.license = 'MIT'
s.homepage = 'https://github.com/Ramotion/expanding-collection'