Removed unneeded property

This commit is contained in:
hryk224
2016-11-17 14:43:16 +09:00
parent 1c9d9cada6
commit 037a932409
11 changed files with 105 additions and 86 deletions
+2 -1
View File
@@ -20,4 +20,5 @@ DerivedData
*.ipa
*.app
*.xccheckout
*.xccheckout
sort-Xcode-project-file
+30 -14
View File
@@ -86,8 +86,8 @@
isa = PBXGroup;
children = (
935BD6C71CE26EB600E5FDF7 /* Example */,
935BD6C61CE26EB600E5FDF7 /* Products */,
EDA05AD11D92901900F7C2C5 /* Frameworks */,
935BD6C61CE26EB600E5FDF7 /* Products */,
);
sourceTree = "<group>";
};
@@ -102,22 +102,38 @@
935BD6C71CE26EB600E5FDF7 /* Example */ = {
isa = PBXGroup;
children = (
ED510E6D1DDD513200470C8B /* Pattern1 */,
ED510E6E1DDD513F00470C8B /* Pattern2 */,
935BD6C81CE26EB600E5FDF7 /* AppDelegate.swift */,
935BD6CF1CE26EB600E5FDF7 /* Assets.xcassets */,
935BD6DA1CE26F0B00E5FDF7 /* ImageCollectionViewCell.swift */,
935BD6DB1CE26F0B00E5FDF7 /* ImageCollectionViewCell.xib */,
935BD6DC1CE26F0B00E5FDF7 /* MainViewController.swift */,
935BD6DD1CE26F0B00E5FDF7 /* Pattern1.storyboard */,
935BD6DE1CE26F0B00E5FDF7 /* Pattern1ViewController.swift */,
935BD6DF1CE26F0B00E5FDF7 /* Pattern2.storyboard */,
935BD6E01CE26F0B00E5FDF7 /* Pattern2ViewController.swift */,
935BD6CC1CE26EB600E5FDF7 /* Main.storyboard */,
935BD6CF1CE26EB600E5FDF7 /* Assets.xcassets */,
935BD6D11CE26EB600E5FDF7 /* LaunchScreen.storyboard */,
935BD6D41CE26EB600E5FDF7 /* Info.plist */,
935BD6D11CE26EB600E5FDF7 /* LaunchScreen.storyboard */,
935BD6CC1CE26EB600E5FDF7 /* Main.storyboard */,
935BD6DC1CE26F0B00E5FDF7 /* MainViewController.swift */,
);
path = Example;
sourceTree = "<group>";
};
ED510E6D1DDD513200470C8B /* Pattern1 */ = {
isa = PBXGroup;
children = (
935BD6DD1CE26F0B00E5FDF7 /* Pattern1.storyboard */,
935BD6DE1CE26F0B00E5FDF7 /* Pattern1ViewController.swift */,
);
name = Pattern1;
sourceTree = "<group>";
};
ED510E6E1DDD513F00470C8B /* Pattern2 */ = {
isa = PBXGroup;
children = (
935BD6DF1CE26F0B00E5FDF7 /* Pattern2.storyboard */,
935BD6E01CE26F0B00E5FDF7 /* Pattern2ViewController.swift */,
);
name = Pattern2;
sourceTree = "<group>";
};
EDA05AD11D92901900F7C2C5 /* Frameworks */ = {
isa = PBXGroup;
children = (
@@ -211,12 +227,12 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
935BD6E61CE26F0B00E5FDF7 /* Pattern2.storyboard in Resources */,
935BD6D31CE26EB600E5FDF7 /* LaunchScreen.storyboard in Resources */,
935BD6D01CE26EB600E5FDF7 /* Assets.xcassets in Resources */,
935BD6E41CE26F0B00E5FDF7 /* Pattern1.storyboard in Resources */,
935BD6E21CE26F0B00E5FDF7 /* ImageCollectionViewCell.xib in Resources */,
935BD6D31CE26EB600E5FDF7 /* LaunchScreen.storyboard in Resources */,
935BD6CE1CE26EB600E5FDF7 /* Main.storyboard in Resources */,
935BD6E41CE26F0B00E5FDF7 /* Pattern1.storyboard in Resources */,
935BD6E61CE26F0B00E5FDF7 /* Pattern2.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -227,11 +243,11 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
935BD6C91CE26EB600E5FDF7 /* AppDelegate.swift in Sources */,
935BD6E11CE26F0B00E5FDF7 /* ImageCollectionViewCell.swift in Sources */,
935BD6E31CE26F0B00E5FDF7 /* MainViewController.swift in Sources */,
935BD6E51CE26F0B00E5FDF7 /* Pattern1ViewController.swift in Sources */,
935BD6E11CE26F0B00E5FDF7 /* ImageCollectionViewCell.swift in Sources */,
935BD6E71CE26F0B00E5FDF7 /* Pattern2ViewController.swift in Sources */,
935BD6C91CE26EB600E5FDF7 /* AppDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -12,7 +12,7 @@ final class ImageCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var imageView: UIImageView!
static let identifier = "ImageCollectionViewCell"
static let nib = UINib(nibName: "ImageCollectionViewCell", bundle: nil)
func configure(_ indexPath: IndexPath) {
func configure(indexPath: IndexPath) {
let image = UIImage(named: String(indexPath.item))
imageView.image = image
setNeedsLayout()
+15 -7
View File
@@ -12,23 +12,26 @@ import InfiniteCollectionView
final class MainViewController: UIViewController {
var patterns = ["pattern1", "pattern2"]
let identifier = "tableViewCell"
var cellHeight: CGFloat {
return (UIScreen.main.bounds.height - 64) / CGFloat(patterns.count)
}
@IBOutlet weak var tableView: UITableView! {
didSet {
tableView.delegate = self
tableView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: identifier)
tableView.rowHeight = 100
tableView.estimatedRowHeight = 100
tableView.rowHeight = cellHeight
tableView.estimatedRowHeight = cellHeight
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let selectedIndexPath = tableView.indexPathForSelectedRow {
tableView.deselectRow(at: selectedIndexPath, animated: true)
}
guard let selectedIndexPath = tableView.indexPathForSelectedRow else { return }
tableView.deselectRow(at: selectedIndexPath, animated: true)
}
}
// MARK: - UITableViewDelegate, UITableViewDataSource
extension MainViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return patterns.count
@@ -36,15 +39,20 @@ extension MainViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: identifier)!
cell.textLabel?.text = patterns[indexPath.row]
cell.textLabel?.textAlignment = .center
cell.textLabel?.font = UIFont.boldSystemFont(ofSize: 24)
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 0 {
switch indexPath.row {
case 0:
let controller = Pattern1ViewController.createFromStoryboard()
navigationController?.pushViewController(controller, animated: true)
} else if indexPath.row == 1 {
case 1:
let controller = Pattern2ViewController.createFromStoryboard()
navigationController?.pushViewController(controller, animated: true)
default:
break
}
}
}
+2 -2
View File
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11535.1" systemVersion="16A323" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="jtB-7l-rQl">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11542" systemVersion="16B2555" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="jtB-7l-rQl">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11523"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11524"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
+4 -6
View File
@@ -10,12 +10,11 @@ import UIKit
import InfiniteCollectionView
final class Pattern1ViewController: UIViewController {
var items = ["1", "2", "3", "4"]
var itemsCount: Int = 5
@IBOutlet weak var collectionView: InfiniteCollectionView! {
didSet {
collectionView.infiniteDataSource = self
collectionView.infiniteDelegate = self
collectionView.cellWidth = UIScreen.main.bounds.width
collectionView.register(ImageCollectionViewCell.nib, forCellWithReuseIdentifier: ImageCollectionViewCell.identifier)
}
}
@@ -26,7 +25,7 @@ final class Pattern1ViewController: UIViewController {
}
@IBOutlet weak var pageControl: UIPageControl! {
didSet {
pageControl.numberOfPages = items.count
pageControl.numberOfPages = itemsCount
}
}
static func createFromStoryboard() -> Pattern1ViewController {
@@ -37,7 +36,6 @@ final class Pattern1ViewController: UIViewController {
super.viewWillTransition(to: size, with: coordinator)
layout.itemSize = size
layout.invalidateLayout()
collectionView.cellWidth = size.width
collectionView.layoutIfNeeded()
collectionView.setNeedsLayout()
}
@@ -46,11 +44,11 @@ final class Pattern1ViewController: UIViewController {
// MARK: - InfiniteCollectionViewDataSource, InfiniteCollectionViewDelegate
extension Pattern1ViewController: InfiniteCollectionViewDataSource, InfiniteCollectionViewDelegate {
func number(ofItems collectionView: UICollectionView) -> Int {
return items.count
return itemsCount
}
func collectionView(_ collectionView: UICollectionView, dequeueForItemAt dequeueIndexPath: IndexPath, cellForItemAt usableIndexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ImageCollectionViewCell.identifier, for: dequeueIndexPath) as! ImageCollectionViewCell
cell.configure(usableIndexPath)
cell.configure(indexPath: usableIndexPath)
return cell
}
func infiniteCollectionView(_ collectionView: UICollectionView, didSelectItemAt usableIndexPath: IndexPath) {
+17 -17
View File
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11535.1" systemVersion="16A323" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="OWH-Uo-QHx">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11542" systemVersion="16B2555" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="OWH-Uo-QHx">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11523"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11524"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
@@ -25,15 +25,15 @@
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="InfiniteTableViewCell" rowHeight="161" id="1U1-fg-z8H" customClass="InfiniteTableViewCell" customModule="Example" customModuleProvider="target">
<rect key="frame" x="0.0" y="28" width="375" height="161"/>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="InfiniteTableViewCell" rowHeight="240" id="1U1-fg-z8H" customClass="InfiniteTableViewCell" customModule="Example" customModuleProvider="target">
<rect key="frame" x="0.0" y="28" width="375" height="240"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="1U1-fg-z8H" id="FjB-bh-baH">
<rect key="frame" x="0.0" y="0.0" width="375" height="160.5"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="239"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" pagingEnabled="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="g4o-O8-u5y" customClass="InfiniteCollectionView" customModule="InfiniteCollectionView">
<rect key="frame" x="0.0" y="0.0" width="375" height="160.5"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="240"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="0.0" minimumInteritemSpacing="0.0" id="JvE-3O-3Xs">
<size key="itemSize" width="50" height="50"/>
@@ -43,14 +43,14 @@
</collectionViewFlowLayout>
<cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="ImageCollectionViewCell" id="PWv-9R-TGh" customClass="ImageCollectionViewCell" customModule="Example" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.5" width="375" height="160"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="240"/>
<autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="375" height="160"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="240"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="m9D-ne-YCP">
<rect key="frame" x="0.0" y="0.0" width="375" height="160"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="240"/>
</imageView>
</subviews>
</view>
@@ -60,7 +60,7 @@
<constraint firstItem="m9D-ne-YCP" firstAttribute="leading" secondItem="PWv-9R-TGh" secondAttribute="leading" id="kKT-hw-BrG"/>
<constraint firstAttribute="bottom" secondItem="m9D-ne-YCP" secondAttribute="bottom" id="lvQ-hr-UgB"/>
</constraints>
<size key="customSize" width="375" height="160"/>
<size key="customSize" width="375" height="240"/>
<connections>
<outlet property="imageView" destination="m9D-ne-YCP" id="c9f-Gz-ruC"/>
</connections>
@@ -68,14 +68,14 @@
</cells>
</collectionView>
<view userInteractionEnabled="NO" alpha="0.5" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cWs-n0-Daa">
<rect key="frame" x="0.0" y="103.5" width="375" height="37"/>
<rect key="frame" x="0.0" y="182.5" width="375" height="37"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="37" id="Jfa-Ja-OcD"/>
</constraints>
</view>
<pageControl opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" numberOfPages="3" translatesAutoresizingMaskIntoConstraints="NO" id="TnJ-eK-8qD">
<rect key="frame" x="0.0" y="103.5" width="375" height="37"/>
<rect key="frame" x="0.0" y="182.5" width="375" height="37"/>
<constraints>
<constraint firstAttribute="height" constant="37" id="iLI-sf-nVD"/>
</constraints>
@@ -102,15 +102,15 @@
<outlet property="pageControl" destination="TnJ-eK-8qD" id="APk-sp-T8S"/>
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Infinite2TableViewCell" rowHeight="101" id="Pbe-Q2-B3O" customClass="Infinite2TableViewCell" customModule="Example" customModuleProvider="target">
<rect key="frame" x="0.0" y="189" width="375" height="101"/>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Infinite2TableViewCell" rowHeight="120" id="Pbe-Q2-B3O" customClass="Infinite2TableViewCell" customModule="Example" customModuleProvider="target">
<rect key="frame" x="0.0" y="268" width="375" height="120"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Pbe-Q2-B3O" id="Vro-Kf-tWq">
<rect key="frame" x="0.0" y="0.0" width="375" height="100.5"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="119"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="ba3-za-Kdk" customClass="InfiniteCollectionView" customModule="InfiniteCollectionView">
<rect key="frame" x="0.0" y="0.0" width="375" height="100.5"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="119.5"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="9h8-PU-jeW">
<size key="itemSize" width="100" height="100"/>
@@ -120,7 +120,7 @@
</collectionViewFlowLayout>
<cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="ImageCollectionViewCell" id="HBK-Vd-0rJ" customClass="ImageCollectionViewCell" customModule="Example" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.5" width="100" height="100"/>
<rect key="frame" x="0.0" y="10" width="100" height="100"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="100" height="100"/>
+22 -25
View File
@@ -10,12 +10,10 @@ import UIKit
import InfiniteCollectionView
final class Pattern2ViewController: UIViewController {
static func createFromStoryboard() -> Pattern2ViewController {
let storyboard = UIStoryboard(name: "Pattern2", bundle: nil)
return storyboard.instantiateInitialViewController() as! Pattern2ViewController
}
@IBOutlet weak var tableView: UITableView! {
didSet {
tableView.delegate = self
@@ -25,38 +23,35 @@ final class Pattern2ViewController: UIViewController {
}
}
// MARK: - UITableViewDataSource, UITableViewDelegate
extension Pattern2ViewController: UITableViewDataSource, UITableViewDelegate {
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return 1
} else if section == 1 {
return 1
switch section {
case 0, 1: return 1
default: return 0
}
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 0 {
switch indexPath.section {
case 0:
let cell = tableView.dequeueReusableCell(withIdentifier: InfiniteTableViewCell.identifier) as! InfiniteTableViewCell
return cell
} else if indexPath.section == 1 {
case 1:
let cell = tableView.dequeueReusableCell(withIdentifier: Infinite2TableViewCell.identifier) as! Infinite2TableViewCell
return cell
} else {
default:
return UITableViewCell()
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.section == 0 {
return 240
} else if indexPath.section == 1 {
return 120
switch indexPath.section {
case 0: return 240
case 1: return 120
default: return 0
}
return 0
}
}
@@ -64,16 +59,15 @@ final class InfiniteTableViewCell: UITableViewCell {
static let identifier = "InfiniteTableViewCell"
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NotificationCenter.default.addObserver(self, selector: #selector(InfiniteTableViewCell.rotate(_:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(InfiniteTableViewCell.rotate(_:)), name: .UIDeviceOrientationDidChange, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
NotificationCenter.default.removeObserver(self, name: .UIDeviceOrientationDidChange, object: nil)
}
@IBOutlet weak var collectionView: InfiniteCollectionView! {
didSet {
collectionView.infiniteDataSource = self
collectionView.infiniteDelegate = self
collectionView.cellWidth = UIScreen.main.bounds.width
collectionView.register(ImageCollectionViewCell.nib, forCellWithReuseIdentifier: ImageCollectionViewCell.identifier)
}
}
@@ -91,7 +85,7 @@ final class InfiniteTableViewCell: UITableViewCell {
let size = CGSize(width: UIScreen.main.bounds.width, height: 239)
layout.itemSize = size
layout.invalidateLayout()
collectionView.cellWidth = size.width
collectionView.rotate(notification)
collectionView.layoutIfNeeded()
collectionView.setNeedsLayout()
}
@@ -104,7 +98,7 @@ extension InfiniteTableViewCell: InfiniteCollectionViewDataSource, InfiniteColle
}
func collectionView(_ collectionView: UICollectionView, dequeueForItemAt dequeueIndexPath: IndexPath, cellForItemAt usableIndexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ImageCollectionViewCell.identifier, for: dequeueIndexPath) as! ImageCollectionViewCell
cell.configure(usableIndexPath)
cell.configure(indexPath: usableIndexPath)
return cell
}
func scrollView(_ scrollView: UIScrollView, pageIndex: Int) {
@@ -116,16 +110,15 @@ final class Infinite2TableViewCell: UITableViewCell {
static let identifier = "Infinite2TableViewCell"
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NotificationCenter.default.addObserver(self, selector: #selector(Infinite2TableViewCell.rotate(_:)), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(Infinite2TableViewCell.rotate(_:)), name: .UIDeviceOrientationDidChange, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
NotificationCenter.default.removeObserver(self, name: .UIDeviceOrientationDidChange, object: nil)
}
@IBOutlet weak var collectionView: InfiniteCollectionView! {
didSet {
collectionView.infiniteDataSource = self
collectionView.infiniteDelegate = self
collectionView.cellWidth = 100
collectionView.register(ImageCollectionViewCell.nib, forCellWithReuseIdentifier: ImageCollectionViewCell.identifier)
}
}
@@ -138,12 +131,16 @@ extension Infinite2TableViewCell: InfiniteCollectionViewDataSource, InfiniteColl
}
func collectionView(_ collectionView: UICollectionView, dequeueForItemAt dequeueIndexPath: IndexPath, cellForItemAt usableIndexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ImageCollectionViewCell.identifier, for: dequeueIndexPath) as! ImageCollectionViewCell
cell.configure(usableIndexPath)
cell.configure(indexPath: usableIndexPath)
return cell
}
func infiniteCollectionView(_ collectionView: UICollectionView, didSelectItemAt usableIndexPath: IndexPath) {
print("didSelectItemAt: \(usableIndexPath.item)")
}
func rotate(_ notification: Notification) {
collectionView.collectionViewLayout.invalidateLayout()
collectionView.rotate(notification)
collectionView.layoutIfNeeded()
collectionView.setNeedsLayout()
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "InfiniteCollectionView"
s.version = "1.1.0"
s.version = "1.2.0"
s.summary = "Infinite Scrolling Using UICollectionView."
s.homepage = "https://github.com/hryk224/InfiniteCollectionView"
s.screenshots = "https://github.com/hryk224/InfiniteCollectionView/wiki/images/sample1.gif"
@@ -32,14 +32,8 @@ open class InfiniteCollectionView: UICollectionView {
fileprivate static let defaultIdentifier = "Cell"
open weak var infiniteDataSource: InfiniteCollectionViewDataSource?
open weak var infiniteDelegate: InfiniteCollectionViewDelegate?
open var cellWidth: CGFloat = UIScreen.main.bounds.width {
didSet {
contentWidth = totalContentWidth
setContentOffset(CGPoint(x: CGFloat(pageIndex + indexOffset) * cellWidth, y: contentOffset.y), animated: false)
}
}
fileprivate var indexOffset: Int = 0
fileprivate var contentWidth: CGFloat = 0
fileprivate var contentWidth: CGFloat = UIScreen.main.bounds.width
fileprivate var pageIndex = 0
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
@@ -56,16 +50,21 @@ open class InfiniteCollectionView: UICollectionView {
super.reloadData()
contentWidth = totalContentWidth
}
func rotate(_ notification: Notification) {
open func rotate(_ notification: Notification) {
contentWidth = totalContentWidth
contentOffset = CGPoint(x: CGFloat(pageIndex + indexOffset) * cellWidth, y: contentOffset.y)
}
}
// MARK: - private
private extension InfiniteCollectionView {
var cellWidth: CGFloat {
guard let layout = collectionViewLayout as? UICollectionViewFlowLayout else { return 0 }
return layout.itemSize.width + layout.minimumInteritemSpacing
}
var totalContentWidth: CGFloat {
let numberOfCells = infiniteDataSource?.number(ofItems: self) ?? 0
return CGFloat(numberOfCells) * cellWidth
let numberOfCells: CGFloat = CGFloat(infiniteDataSource?.number(ofItems: self) ?? 0)
return numberOfCells * cellWidth
}
func configure() {
delegate = self
@@ -75,7 +74,7 @@ private extension InfiniteCollectionView {
}
func centerIfNeeded(_ scrollView: UIScrollView) {
let currentOffset = contentOffset
let centerX = (CGFloat(Me.dummyCount) * contentWidth - bounds.width) / 2
let centerX = (scrollView.contentSize.width - bounds.width) / 2
let distFromCenter = centerX - currentOffset.x
if fabs(distFromCenter) > (contentWidth / 4) {
let cellcount = distFromCenter / cellWidth
+1 -1
View File
@@ -6,6 +6,7 @@ Infinite horizontal scrolling using `UICollectionView`
[![Swift 3.0](https://img.shields.io/badge/Swift-3.0-orange.svg?style=flat)](https://developer.apple.com/swift/)
<img src="https://github.com/hryk224/InfiniteCollectionView/wiki/images/sample1.gif" width="320" >
<img src="https://github.com/hryk224/InfiniteCollectionView/wiki/images/sample2.gif" width="320" >
## Requirements
@@ -43,7 +44,6 @@ import InfiniteCollectionView
```Swift
collectionView.infiniteDataSource = XXX
collectionView.infiniteDelegate = XXX
collectionView.cellWidth = XXX
```
```Swift