diff --git a/VegaScroll.xcodeproj/project.pbxproj b/VegaScroll.xcodeproj/project.pbxproj
index e7dca17..d7736f7 100644
--- a/VegaScroll.xcodeproj/project.pbxproj
+++ b/VegaScroll.xcodeproj/project.pbxproj
@@ -109,11 +109,12 @@
DD52B8531F6AC89B00E2AD33 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 0900;
+ LastUpgradeCheck = 1130;
ORGANIZATIONNAME = "Guilherme Rambo";
TargetAttributes = {
DD52B85B1F6AC89B00E2AD33 = {
CreatedOnToolsVersion = 9.0;
+ LastSwiftMigration = 1130;
ProvisioningStyle = Automatic;
};
};
@@ -124,6 +125,7 @@
hasScannedForEncodings = 0;
knownRegions = (
en,
+ Base,
);
mainGroup = DD52B8521F6AC89B00E2AD33;
productRefGroup = DD52B85D1F6AC89B00E2AD33 /* Products */;
@@ -171,6 +173,7 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
@@ -178,6 +181,7 @@
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
@@ -231,6 +235,7 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
@@ -238,6 +243,7 @@
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
@@ -285,7 +291,7 @@
PRODUCT_BUNDLE_IDENTIFIER = br.com.guilhermerambo.VegaScrollFlowLayout;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
SKIP_INSTALL = YES;
- SWIFT_VERSION = 4.0;
+ SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
@@ -305,7 +311,7 @@
PRODUCT_BUNDLE_IDENTIFIER = br.com.guilhermerambo.VegaScrollFlowLayout;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
SKIP_INSTALL = YES;
- SWIFT_VERSION = 4.0;
+ SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
diff --git a/VegaScroll.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/VegaScroll.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/VegaScroll.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/VegaScroll.xcodeproj/xcshareddata/xcschemes/VegaScrollFlowLayout.xcscheme b/VegaScroll.xcodeproj/xcshareddata/xcschemes/VegaScrollFlowLayout.xcscheme
index db58330..7418d9d 100644
--- a/VegaScroll.xcodeproj/xcshareddata/xcschemes/VegaScrollFlowLayout.xcscheme
+++ b/VegaScroll.xcodeproj/xcshareddata/xcschemes/VegaScrollFlowLayout.xcscheme
@@ -1,6 +1,6 @@
-
-
-
-
[UICollectionViewLayoutAttributes]? {
guard let collectionView = collectionView else { return nil }
let dynamicItems = dynamicAnimator.items(in: rect) as? [UICollectionViewLayoutAttributes]
+
dynamicItems?.forEach { item in
- let convertedY = item.center.y - collectionView.contentOffset.y - sectionInset.top
- item.zIndex = item.indexPath.row
- transformItemIfNeeded(y: convertedY, item: item)
+ let convertedY = item.center.y - collectionView.contentOffset.y - sectionInset.top
+ item.zIndex = item.indexPath.row
+ transformItemIfNeeded(y: convertedY, item: item)
}
return dynamicItems
}
- private func transformItemIfNeeded(y: CGFloat, item: UICollectionViewLayoutAttributes) {
- guard itemSize.height > 0, y < itemSize.height * 0.5 else {
- return
- }
-
- let scaleFactor: CGFloat = scaleDistributor(x: y)
+ private func transformItemIfNeeded(y: CGFloat, item: UICollectionViewLayoutAttributes) {
+ guard itemSize.height > 0, y < itemSize.height * 0.5 else { return }
- let yDelta = getYDelta(y: y)
+ let scaleFactor: CGFloat = scaleDistributor(x: y)
+ let yDelta = getYDelta(y: y)
- item.transform3D = CATransform3DTranslate(transformIdentity, 0, yDelta, 0)
- item.transform3D = CATransform3DScale(item.transform3D, scaleFactor, scaleFactor, scaleFactor)
- item.alpha = alphaDistributor(x: y)
-
- }
+ item.transform3D = CATransform3DTranslate(transformIdentity, 0, yDelta, 0)
+ item.transform3D = CATransform3DScale(item.transform3D, scaleFactor, scaleFactor, scaleFactor)
+ item.alpha = alphaDistributor(x: y)
+ }
override open func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
return dynamicAnimator.layoutAttributesForCell(at: indexPath)!
@@ -119,7 +115,7 @@ open class VegaScrollFlowLayout: UICollectionViewFlowLayout {
let touchLocation = collectionView!.panGestureRecognizer.location(in: collectionView)
- dynamicAnimator.behaviors.flatMap { $0 as? UIAttachmentBehavior }.forEach { behavior in
+ dynamicAnimator.behaviors.compactMap { $0 as? UIAttachmentBehavior }.forEach { behavior in
let attrs = behavior.items.first as! UICollectionViewLayoutAttributes
attrs.center = getUpdatedBehaviorItemCenter(behavior: behavior, touchLocation: touchLocation)
self.dynamicAnimator.updateItem(usingCurrentState: attrs)
@@ -168,8 +164,8 @@ open class VegaScrollFlowLayout: UICollectionViewFlowLayout {
private func getUpdatedBehaviorItemCenter(behavior: UIAttachmentBehavior,
touchLocation: CGPoint) -> CGPoint {
- let yDistanceFromTouch = fabs(touchLocation.y - behavior.anchorPoint.y)
- let xDistanceFromTouch = fabs(touchLocation.x - behavior.anchorPoint.x)
+ let yDistanceFromTouch = abs(touchLocation.y - behavior.anchorPoint.y)
+ let xDistanceFromTouch = abs(touchLocation.x - behavior.anchorPoint.x)
let scrollResistance = (yDistanceFromTouch + xDistanceFromTouch) / (springHardness * 100)
let attrs = behavior.items.first as! UICollectionViewLayoutAttributes
@@ -191,24 +187,22 @@ open class VegaScrollFlowLayout: UICollectionViewFlowLayout {
- parameter xOrigin: x coordinate of the function origin.
*/
private func distributor(x: CGFloat, threshold: CGFloat, xOrigin: CGFloat) -> CGFloat {
- guard threshold > xOrigin else {
- return 1
- }
+ guard threshold > xOrigin else { return 1 }
var arg = (x - xOrigin)/(threshold - xOrigin)
arg = arg <= 0 ? 0 : arg
let y = sqrt(arg)
return y > 1 ? 1 : y
}
- private func scaleDistributor(x: CGFloat) -> CGFloat {
- return distributor(x: x, threshold: itemSize.height * 0.5, xOrigin: -itemSize.height * 5)
+ private func scaleDistributor(x: CGFloat) -> CGFloat {
+ return distributor(x: x, threshold: itemSize.height * 0.5, xOrigin: -itemSize.height * 5)
}
private func alphaDistributor(x: CGFloat) -> CGFloat {
- return distributor(x: x, threshold: itemSize.height * 0.5, xOrigin: -itemSize.height)
+ return distributor(x: x, threshold: itemSize.height * 0.5, xOrigin: -itemSize.height)
}
- private func getYDelta(y: CGFloat) -> CGFloat {
- return itemSize.height * 0.5 - y
- }
+ private func getYDelta(y: CGFloat) -> CGFloat {
+ return itemSize.height * 0.5 - y
+ }
}