From 39580e23a194a2edde9cecc09393e19741986d02 Mon Sep 17 00:00:00 2001 From: Vlad Iacob Date: Fri, 8 May 2020 16:16:57 +0300 Subject: [PATCH] Add SPM --- .../contents.xcworkspacedata | 7 ++ Package.swift | 28 +++++ .../Swinflate/SWHorizontalStackLayout.swift | 112 ++++++++++++++++++ Sources/Swinflate/SWInflateLayout.swift | 110 +++++++++++++++++ Swinflate/.gitignore | 5 + .../contents.xcworkspacedata | 7 ++ Swinflate/README.md | 3 + .../UserInterfaceState.xcuserstate | Bin 52053 -> 52331 bytes Tests/LinuxMain.swift | 7 ++ Tests/SwinflateTests/XCTestManifests.swift | 9 ++ 10 files changed, 288 insertions(+) create mode 100644 .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata create mode 100644 Package.swift create mode 100644 Sources/Swinflate/SWHorizontalStackLayout.swift create mode 100644 Sources/Swinflate/SWInflateLayout.swift create mode 100644 Swinflate/.gitignore create mode 100644 Swinflate/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata create mode 100644 Swinflate/README.md create mode 100644 Tests/LinuxMain.swift create mode 100644 Tests/SwinflateTests/XCTestManifests.swift diff --git a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..77f3a8e --- /dev/null +++ b/Package.swift @@ -0,0 +1,28 @@ +// swift-tools-version:5.2 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "Swinflate", + products: [ + // Products define the executables and libraries produced by a package, and make them visible to other packages. + .library( + name: "Swinflate", + targets: ["Swinflate"]), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + // .package(url: /* package url */, from: "1.0.0"), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages which this package depends on. + .target( + name: "Swinflate", + dependencies: []), + .testTarget( + name: "SwinflateTests", + dependencies: ["Swinflate"]), + ] +) diff --git a/Sources/Swinflate/SWHorizontalStackLayout.swift b/Sources/Swinflate/SWHorizontalStackLayout.swift new file mode 100644 index 0000000..062d60c --- /dev/null +++ b/Sources/Swinflate/SWHorizontalStackLayout.swift @@ -0,0 +1,112 @@ +// +// SWHorizontalStackLayout.swift +// Swinflate +// +// Created by Vlad on 12/20/18. +// Copyright © 2018 Vlad Iacob. All rights reserved. +// + +import UIKit + +public final class SWHorizontalStackLayout: UICollectionViewFlowLayout { + // MARK: - Properties + + public var hasStackEffect = false + public var isPagingEnabled = true + private var firstSetupDone = false + private var cellWidth: CGFloat = 0 + private let scaleRatio: CGFloat = 0.05 + + // MARK: - Override + + public override func prepare() { + super.prepare() + + guard firstSetupDone else { + setup() + firstSetupDone = true + return + } + } + + public override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool { + true + } + + public override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint { + // If the property `isPagingEnabled` is set to false, we don't enable paging and thus return the current contentoffset. + guard isPagingEnabled else { + let latestOffset = super.targetContentOffset(forProposedContentOffset: proposedContentOffset, withScrollingVelocity: velocity) + return latestOffset + } + + // Page width used for estimating and calculating paging. + let pageWidth = cellWidth + self.minimumInteritemSpacing + + // Make an estimation of the current page position. + let approximatePage = self.collectionView!.contentOffset.x / pageWidth + + // Determine the current page based on velocity. + let currentPage = (velocity.x < 0.0) ? floor(approximatePage) : ceil(approximatePage) + + // Create custom flickVelocity. + let flickVelocity = velocity.x * 0.4 + + // Check how many pages the user flicked, if <= 1 then flickedPages should return 0. + let flickedPages = (abs(round(flickVelocity)) <= 1) ? 0 : round(flickVelocity) + + // Calculate newVerticalOffset. + let newVerticalOffset = ((currentPage + flickedPages) * pageWidth) - self.collectionView!.contentInset.left + + return CGPoint(x: newVerticalOffset, y: proposedContentOffset.y) + } + + public override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { + guard let allAttributes = super.layoutAttributesForElements(in: rect) else { + return nil + } + + guard let firstAttribute = allAttributes.first else { return nil } + + cellWidth = firstAttribute.size.width + + for attribute in allAttributes { + self.updateAttribute(attribute) + } + + return allAttributes + } + + // MARK: - Private Functions + + private func setup() { + scrollDirection = .horizontal + collectionView!.decelerationRate = UIScrollView.DecelerationRate.normal + } + + private func updateAttribute(_ attributes: UICollectionViewLayoutAttributes) { + guard let collectionView = collectionView else { return } + let minX = collectionView.bounds.minX + collectionView.contentInset.left + let maxX = attributes.frame.origin.x + + let finalX = max(minX, maxX) + var origin = attributes.frame.origin + let deltaY = (finalX - origin.x) / attributes.frame.width + + let scale = 1 - deltaY * scaleRatio + let translation = CGFloat((attributes.zIndex + 1) * 10) + + var t = CGAffineTransform.identity + t = t.scaledBy(x: 1, y: scale) + + if hasStackEffect { + t = t.translatedBy(x: -(translation + deltaY * translation), y: 0) + } + attributes.alpha = 1 - deltaY * 0.6 + attributes.transform = t + + origin.x = finalX + attributes.frame = CGRect(origin: origin, size: attributes.frame.size) + attributes.zIndex = attributes.indexPath.row + } +} diff --git a/Sources/Swinflate/SWInflateLayout.swift b/Sources/Swinflate/SWInflateLayout.swift new file mode 100644 index 0000000..80089e4 --- /dev/null +++ b/Sources/Swinflate/SWInflateLayout.swift @@ -0,0 +1,110 @@ +// +// SWInflateLayout.swift +// Swinflate +// +// Created by Vlad on 12/17/18. +// Copyright © 2018 Vlad Iacob. All rights reserved. +// + +import UIKit + +public final class SWInflateLayout: UICollectionViewFlowLayout { + // MARK: - Properties + + public var isPagingEnabled = true + public var leftContentOffset: CGFloat = 0 + private var firstSetupDone = false + private var cellWidth: CGFloat = 0 + private var contentSpacing: CGFloat = 0 + + // MARK: - Override + + override public func prepare() { + super.prepare() + + guard !firstSetupDone else { + return + } + + scrollDirection = .horizontal + firstSetupDone = true + } + + override public func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool { + true + } + + public override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint { + // If the property `isPagingEnabled` is set to false, we don't enable paging and thus return the current contentoffset. + guard isPagingEnabled else { + let latestOffset = super.targetContentOffset(forProposedContentOffset: proposedContentOffset, withScrollingVelocity: velocity) + return latestOffset + } + + // Page width used for estimating and calculating paging + let pageWidth = cellWidth + self.minimumInteritemSpacing + + // Make an estimation of the current page position. + let approximatePage = self.collectionView!.contentOffset.x / pageWidth + + // Determine the current page based on velocity. + let currentPage = (velocity.x < 0.0) ? floor(approximatePage) : ceil(approximatePage) + + // Create custom flickVelocity. + let flickVelocity = velocity.x * 0.4 + + // Check how many pages the user flicked, if <= 1 then flickedPages should return 0. + let flickedPages = (abs(round(flickVelocity)) <= 1) ? 0 : round(flickVelocity) + + // Calculate newHorizontalOffset + let newHorizontalOffset = ((currentPage + flickedPages) * pageWidth) - self.collectionView!.contentInset.left + + return CGPoint(x: newHorizontalOffset - (2 * leftContentOffset), y: proposedContentOffset.x) + } + + override public func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { + let items = NSMutableArray (array: super.layoutAttributesForElements(in: rect)!, copyItems: true) + + guard let firstCellAttribute = items.firstObject as? UICollectionViewLayoutAttributes else { + return nil + } + + cellWidth = firstCellAttribute.size.width + + guard let collectionViewBounds = collectionView?.bounds else { + return nil + } + + contentSpacing = (collectionViewBounds.width - cellWidth) / 2 - leftContentOffset + collectionView?.contentInset = UIEdgeInsets(top: collectionView?.contentInset.top ?? 0, left: contentSpacing - leftContentOffset, bottom: collectionView?.contentInset.bottom ?? 0 , right: 15) + + items.enumerateObjects { (object, index, stop) in + let attribute = object as! UICollectionViewLayoutAttributes + self.cellWidth = attribute.size.width + self.updateCellAttributes(attribute: attribute) + } + + return items as? [UICollectionViewLayoutAttributes] + } + + // MARK: - Private functions + + private func updateCellAttributes(attribute: UICollectionViewLayoutAttributes) { + var finalX: CGFloat = attribute.frame.midX - (collectionView?.contentOffset.x)! + let centerX = attribute.frame.midX - (collectionView?.contentOffset.x)! + if centerX < collectionView!.frame.midX - contentSpacing { + finalX = max(centerX, collectionView!.frame.minX) + } + else if centerX > collectionView!.frame.midX + contentSpacing { + finalX = min(centerX, collectionView!.frame.maxX) + } + + let deltaY = abs(finalX - collectionView!.frame.midX) / attribute.frame.width + let scale = 1 - deltaY * 0.2 + let alpha = 1 - deltaY + + attribute.alpha = alpha + attribute.transform = CGAffineTransform(scaleX: 1, y: scale) + } +} + diff --git a/Swinflate/.gitignore b/Swinflate/.gitignore new file mode 100644 index 0000000..95c4320 --- /dev/null +++ b/Swinflate/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +/.build +/Packages +/*.xcodeproj +xcuserdata/ diff --git a/Swinflate/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/Swinflate/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Swinflate/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Swinflate/README.md b/Swinflate/README.md new file mode 100644 index 0000000..5b5c8bb --- /dev/null +++ b/Swinflate/README.md @@ -0,0 +1,3 @@ +# Swinflate + +A description of this package. diff --git a/Swinflate/Swinflate.xcodeproj/project.xcworkspace/xcuserdata/vlad.xcuserdatad/UserInterfaceState.xcuserstate b/Swinflate/Swinflate.xcodeproj/project.xcworkspace/xcuserdata/vlad.xcuserdatad/UserInterfaceState.xcuserstate index 70b9ec99594429a943e5c1467be3dc636e1edb79..9ef4b53b5711e4460836aa61db4ef71ea6c96e2e 100644 GIT binary patch delta 23581 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 bG1?S0M_Zz;vrAJfHf#P%v;Ny_Y(g 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 [XCTestCaseEntry] { + return [ + testCase(SwinflateTests.allTests), + ] +} +#endif