diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b619258 --- /dev/null +++ b/.gitignore @@ -0,0 +1,68 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +# Mac +.DS_Store + +## Build generated +build/ +DerivedData/ + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata/ + +## Other +*.moved-aside +*.xcuserstate + +## Obj-C/Swift specific +*.hmap +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +.build/ + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output diff --git a/.swift-version b/.swift-version new file mode 100644 index 0000000..b502146 --- /dev/null +++ b/.swift-version @@ -0,0 +1 @@ +3.0.2 diff --git a/AutoToggleHeaderFooterView.podspec b/AutoToggleHeaderFooterView.podspec new file mode 100644 index 0000000..0954c7d --- /dev/null +++ b/AutoToggleHeaderFooterView.podspec @@ -0,0 +1,14 @@ +Pod::Spec.new do |s| + s.name = 'AutoToggleHeaderFooterView' + s.version = '1.0.0' + s.summary = 'A header and footer toggle display-state depending on the scroll or time interval' + s.homepage = 'https://github.com/recruit-lifestyle/AutoToggleHeaderFooterView' + s.license = 'Apache License, Version 2.0' + s.author = { 'Tomoya Hayakawa' => 'rhd_internship_ER5@r.recruit.co.jp' } + s.source = { :git => 'https://github.com/recruit-lifestyle/AutoToggleHeaderFooterView.git', :tag => s.version.to_s } + + s.ios.deployment_target = '8.0' + s.platform = :ios, '8.0' + + s.source_files = 'AutoToggleHeaderFooterView/Classes/**/*' +end diff --git a/AutoToggleHeaderFooterView/Classes/Constraint.swift b/AutoToggleHeaderFooterView/Classes/Constraint.swift new file mode 100644 index 0000000..32dcc35 --- /dev/null +++ b/AutoToggleHeaderFooterView/Classes/Constraint.swift @@ -0,0 +1,53 @@ +// +// Constraint.swift +// Pods +// +// Created by Tomoya Hayakawa on 2017/03/01. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit + +struct Constraint { + static func make(_ view1: Any, _ attr1: NSLayoutAttribute, _ relation: NSLayoutRelation, to view2: Any?, _ attr2: NSLayoutAttribute, multiplier: CGFloat = 1.0, constant c: CGFloat = 0, priority: UILayoutPriority? = nil) -> NSLayoutConstraint { + let constraint = NSLayoutConstraint(item: view1, attribute: attr1, relatedBy: relation, + toItem: view2, attribute: attr2, multiplier: multiplier, constant: c) + if let priority = priority { + constraint.priority = priority + } + + return constraint + } + + static func make(_ view1: Any, edgesEqualTo view2: Any, multiplier: CGFloat = 1.0, priority: UILayoutPriority? = nil) -> [NSLayoutConstraint] { + let constraints = [ + NSLayoutConstraint(item: view1, attribute: .top, relatedBy: .equal, toItem: view2, attribute: .top, multiplier: multiplier, constant: 0), + NSLayoutConstraint(item: view1, attribute: .left, relatedBy: .equal, toItem: view2, attribute: .left, multiplier: multiplier, constant: 0), + NSLayoutConstraint(item: view1, attribute: .bottom, relatedBy: .equal, toItem: view2, attribute: .bottom, multiplier: multiplier, constant: 0), + NSLayoutConstraint(item: view1, attribute: .right, relatedBy: .equal, toItem: view2, attribute: .right, multiplier: multiplier, constant: 0) + ] + if let priority = priority { + constraints.forEach { $0.priority = priority } + } + + return constraints + } + + static func make(_ view: Any, width relation: NSLayoutRelation, to constant: CGFloat, priority: UILayoutPriority? = nil) -> NSLayoutConstraint { + let constraint = NSLayoutConstraint(item: view, attribute: .width, relatedBy: relation, toItem: nil, attribute: .width, multiplier: 1.0, constant: constant) + if let priority = priority { + constraint.priority = priority + } + + return constraint + } + + static func make(_ view: Any, height relation: NSLayoutRelation, to constant: CGFloat, priority: UILayoutPriority? = nil) -> NSLayoutConstraint { + let constraint = NSLayoutConstraint(item: view, attribute: .height, relatedBy: relation, toItem: nil, attribute: .height, multiplier: 1.0, constant: constant) + if let priority = priority { + constraint.priority = priority + } + + return constraint + } +} diff --git a/AutoToggleHeaderFooterView/Classes/ScrollAssistantView.swift b/AutoToggleHeaderFooterView/Classes/ScrollAssistantView.swift new file mode 100644 index 0000000..148c980 --- /dev/null +++ b/AutoToggleHeaderFooterView/Classes/ScrollAssistantView.swift @@ -0,0 +1,398 @@ +// +// AutoToggleHeaderFooterView.swift +// Pods +// +// Created by Tomoya Hayakawa on 2017/03/10. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit + +public class AutoToggleHeaderFooterView: UIView { + + public enum State { + case collapsed, expanded, scrolling + } + + // MARK: - Public Parameter + + public var isTimerEnabled = true + public var isScrollHeaderFooterEnabled = true + public var showAnimationDuration = TimeInterval(0.5) + public var autoShowTimeInterval = TimeInterval(3.0) + private(set) public var state = State.expanded + + fileprivate(set) public var scrollView: UIScrollView? + fileprivate(set) public var header: UIView? + fileprivate(set) public var footer: UIView? + + private(set) public var headerHeight = CGFloat(0) + private(set) public var footerHeight = CGFloat(0) + + private(set) public var visibleHeaderHeight = CGFloat(0) { + didSet { + headerTopConstraint?.constant = -scrollViewContentInset.top + (headerHeight - visibleHeaderHeight) + guard let scrollView = scrollView else { return } + scrollView.contentInset.top = trim(scrollViewContentInset.top + visibleHeaderHeight, + min: scrollViewContentInset.top, + max: scrollViewContentInset.top + headerHeight) + } + } + private(set) public var visibleFooterHeight = CGFloat(0) { + didSet { + footerBottomConstraint?.constant = -scrollViewContentInset.bottom + (footerHeight - visibleFooterHeight) + guard let scrollView = scrollView else { return } + scrollView.contentInset.bottom = trim(scrollViewContentInset.bottom + visibleFooterHeight, + min: scrollViewContentInset.bottom, + max: scrollViewContentInset.bottom + visibleFooterHeight) + } + } + + // MARK: - Private Parameter + + fileprivate var autoShowTimer: Timer? + private var lastScrollViewOffsetY: CGFloat? + + private var scrollViewContentInset = UIEdgeInsets.zero { + didSet { + scrollViewContentInset.top -= headerHeight + scrollViewContentInset.bottom -= footerHeight + headerTopConstraint?.constant = -scrollViewContentInset.top + (headerHeight - visibleHeaderHeight) + footerBottomConstraint?.constant = -scrollViewContentInset.bottom + (footerHeight - visibleFooterHeight) + } + } + + private lazy var panGesture: UIPanGestureRecognizer = { + let gesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan(gesture:))) + gesture.delegate = self + gesture.maximumNumberOfTouches = 1 + + return gesture + }() + + // MARK: Constraint + + fileprivate var headerTopConstraint: NSLayoutConstraint? + fileprivate var footerBottomConstraint: NSLayoutConstraint? + fileprivate var headerHeightConstraint: NSLayoutConstraint? + fileprivate var footerHeightConstraint: NSLayoutConstraint? + + // MARK: KVO Key + + private let scrollViewContentInsetKeyPath = "contentInset" + private let scrollViewContentOffsetKeyPath = "contentOffset" + + // MARK: - Initializer + + public init(header: UIView?, footer: UIView?) { + super.init(frame: .zero) + + clipsToBounds = true + + if let header = header { + self.header = header + headerHeight = header.frame.height + visibleHeaderHeight = headerHeight + addSubview(header) + } + if let footer = footer { + self.footer = footer + footerHeight = footer.frame.height + visibleFooterHeight = footerHeight + addSubview(footer) + } + + // Default state is .expanded, but if header and footer are zero height, set state to .collapsed. + if headerHeight.isZero && footerHeight.isZero { + state = .collapsed + } + + setupHeaderFooterConstraints() + resetAutoShowTimer() + } + + public required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + deinit { + unRegisterScrollView() + } + + // MARK: - Override Method + + public override func didAddSubview(_ subview: UIView) { + super.didAddSubview(subview) + + // Bring header and footer to top + if let header = header { + bringSubview(toFront: header) + } + if let footer = footer { + bringSubview(toFront: footer) + } + } + + // MARK: - Public Method + + /// addSubview ScrollView to AutoToggleHeaderFooterView and add constraint, gesture and observer. + /// ScrollView is given the same size constraint as AutoToggleHeaderFooterView. + /// Also inset and offset of ScrollView are adjusted by the height of header and footer. + public func addScrollView(_ scrollView: UIScrollView) { + addSubview(scrollView) + + register(scrollView: scrollView) + + scrollView.translatesAutoresizingMaskIntoConstraints = false + addConstraints(Constraint.make(scrollView, edgesEqualTo: self)) + } + + /// Inset and offset of ScrollView are adjusted by the height of header and footer, and add gesture and observer. + public func register(scrollView: UIScrollView) { + if self.scrollView != nil { + unRegisterScrollView() + } + self.scrollView = scrollView + + scrollView.scrollIndicatorInsets.top += headerHeight + scrollView.scrollIndicatorInsets.bottom += footerHeight + scrollView.contentInset.top += headerHeight + scrollView.contentInset.bottom += footerHeight + scrollView.contentOffset.y -= headerHeight + scrollViewContentInset = scrollView.contentInset + + scrollView.addGestureRecognizer(panGesture) + scrollView.addObserver(self, forKeyPath: scrollViewContentOffsetKeyPath, options: .new, context: nil) + } + + /// Remove gesture and observer from ScrollView, and restore inset and offset of ScrollView. + public func unRegisterScrollView() { + scrollView?.removeGestureRecognizer(panGesture) + scrollView?.removeObserver(self, forKeyPath: scrollViewContentOffsetKeyPath) + + scrollViewContentInset = .zero + scrollView?.contentOffset.y += headerHeight + scrollView?.scrollIndicatorInsets.top -= headerHeight + scrollView?.scrollIndicatorInsets.bottom -= footerHeight + scrollView?.contentInset.top -= headerHeight + scrollView?.contentInset.bottom -= footerHeight + + scrollView = nil + } + + /// Show header and footer with animation. + /// Default animation duration is `showAnimationDuration: TimeInterval`. + /// If `state` is already expanded this function will not be executed. + public func showHeaderFooter(withDuration duration: TimeInterval? = nil, completion: (() -> Void)? = nil) { + guard state != .expanded else { return } + state = .expanded + visibleHeaderHeight = headerHeight + visibleFooterHeight = footerHeight + updateLayout(withDuration: duration ?? showAnimationDuration, completion: completion) + } + + /// Hide header and footer with animation. + /// Default animation duration is `showAnimationDuration: TimeInterval`. + /// If ScrollView is unregistered or `state` is already collapsed this function will not be executed. + public func hideHeaderFooter(withDuration duration: TimeInterval? = nil, completion: (() -> Void)? = nil) { + guard let scrollView = scrollView, + overContentTopDistance(of: scrollView) <= 0 && overContentBottomDistance(of: scrollView) <= 0, + state != .collapsed + else { return } + state = .collapsed + visibleHeaderHeight = 0 + visibleFooterHeight = 0 + updateLayout(withDuration: duration ?? showAnimationDuration, completion: completion) + } + + /// Update header height with animation. + /// After header height has been updated, header will be displayed. + /// Default animation duration is `showAnimationDuration: TimeInterval`. + public func updateHeaderHeight(to newHeight: CGFloat, duration: TimeInterval = 0, completion: (() -> Void)? = nil) { + guard header != nil else { return } + let diffHeight = newHeight - headerHeight + headerHeight = newHeight + headerHeightConstraint?.constant = newHeight + visibleHeaderHeight = newHeight + scrollView?.scrollIndicatorInsets.top += diffHeight + scrollView?.contentInset.top += diffHeight + state = .expanded + updateLayout(withDuration: duration, completion: completion) + } + + /// Update footer height with animation. + /// After footer height has been updated, footer will be displayed. + /// Default animation duration is `showAnimationDuration: TimeInterval`. + public func updateFooterHeight(to newHeight: CGFloat, duration: TimeInterval = 0, completion: (() -> Void)? = nil) { + guard footer != nil else { return } + let diffHeight = newHeight - footerHeight + footerHeight = newHeight + footerHeightConstraint?.constant = newHeight + visibleFooterHeight = newHeight + scrollView?.scrollIndicatorInsets.bottom += diffHeight + scrollView?.contentInset.bottom += diffHeight + state = .expanded + updateLayout(withDuration: duration, completion: completion) + } + + // MARK: - Timer Handler + + func handleTimer() { + if isTimerEnabled { + showHeaderFooter() + } + resetAutoShowTimer() + } + + // MARK: - UIGestureRecognizer Handler + + func handlePan(gesture: UIGestureRecognizer) { + guard let scrollView = scrollView else { return } + switch gesture.state { + case .began: + state = .scrolling + lastScrollViewOffsetY = scrollView.contentOffset.y + autoShowTimer?.invalidate() + + case .cancelled, .ended, .failed: + if isScrollHeaderFooterEnabled { + let isOverHalfHeaderHeightVisible = header != nil ? visibleHeaderHeight >= headerHeight / 2 : false + let isOverHalfFooterHeightVisible = footer != nil ? visibleFooterHeight >= footerHeight / 2 : false + if overContentTopDistance(of: scrollView) >= 0 || overContentBottomDistance(of: scrollView) >= 0 { + showHeaderFooter(withDuration: 0.3) + } else if !isOverHalfHeaderHeightVisible && !isOverHalfFooterHeightVisible { + hideHeaderFooter() + } else { + showHeaderFooter() + } + } + lastScrollViewOffsetY = nil + resetAutoShowTimer() + + default: + break + } + } + + // MARK: KVO + + public override func observeValue(forKeyPath keyPath: String?, of _: Any?, change: [NSKeyValueChangeKey: Any]?, context _: UnsafeMutableRawPointer?) { + guard let scrollView = scrollView, let keyPath = keyPath, isScrollHeaderFooterEnabled else { return } + + switch keyPath { + case scrollViewContentOffsetKeyPath: + switch state { + case .scrolling: + guard let lastScrollViewOffsetY = lastScrollViewOffsetY else { break } + let diff = lastScrollViewOffsetY - scrollView.contentOffset.y + self.lastScrollViewOffsetY = scrollView.contentOffset.y + + if overContentTopDistance(of: scrollView) >= visibleHeaderHeight { + visibleHeaderHeight = trim(overContentTopDistance(of: scrollView), min: visibleHeaderHeight, max: headerHeight) + visibleFooterHeight = trim(visibleFooterHeight + diff, min: visibleFooterHeight, max: footerHeight) + } else if overContentBottomDistance(of: scrollView) >= 0 { + visibleHeaderHeight = trim(visibleHeaderHeight + diff, min: visibleHeaderHeight, max: headerHeight) + visibleFooterHeight = trim(overContentBottomDistance(of: scrollView), min: visibleFooterHeight, max: footerHeight) + } else { + visibleHeaderHeight = trim(visibleHeaderHeight + diff, min: 0, max: headerHeight) + visibleFooterHeight = trim(visibleFooterHeight + diff, min: 0, max: footerHeight) + } + updateLayout(withDuration: 0) + + case .collapsed: + if overContentTopDistance(of: scrollView) >= headerHeight { + showHeaderFooter(withDuration: 0.1) + } else if overContentBottomDistance(of: scrollView) >= footerHeight { + showHeaderFooter() + } else if overContentTopDistance(of: scrollView) >= visibleHeaderHeight { + visibleHeaderHeight = trim(overContentTopDistance(of: scrollView), min: visibleHeaderHeight, max: headerHeight) + visibleFooterHeight = trim(overContentTopDistance(of: scrollView), min: visibleFooterHeight, max: footerHeight) +// updateLayout(withDuration: 0) + } else if overContentBottomDistance(of: scrollView) >= visibleFooterHeight { + visibleHeaderHeight = trim(overContentBottomDistance(of: scrollView), min: visibleHeaderHeight, max: headerHeight) + visibleFooterHeight = trim(overContentBottomDistance(of: scrollView), min: visibleFooterHeight, max: footerHeight) +// updateLayout(withDuration: 0) + } + + default: + break + } + + default: + break + } + } + + +} + +// MARK: - Private Method + +private extension AutoToggleHeaderFooterView { + func overContentTopDistance(of scrollView: UIScrollView) -> CGFloat { + return -(scrollView.contentOffset.y + scrollView.contentInset.top - headerHeight) + } + + func overContentBottomDistance(of scrollView: UIScrollView) -> CGFloat { + return scrollView.contentOffset.y + scrollView.frame.height - scrollView.contentSize.height + } + + func setupHeaderFooterConstraints() { + if let header = header { + header.translatesAutoresizingMaskIntoConstraints = false + headerTopConstraint = Constraint.make(self, .top, .equal, to: header, .top) + headerHeightConstraint = Constraint.make(header, height: .equal, to: headerHeight) + + addConstraints([ + headerTopConstraint!, + headerHeightConstraint!, + Constraint.make(header, .left, .equal, to: self, .left), + Constraint.make(header, .right, .equal, to: self, .right), + ]) + } + + if let footer = footer { + footer.translatesAutoresizingMaskIntoConstraints = false + footerBottomConstraint = Constraint.make(footer, .bottom, .equal, to: self, .bottom) + footerHeightConstraint = Constraint.make(footer, height: .equal, to: footerHeight) + + addConstraints([ + footerBottomConstraint!, + footerHeightConstraint!, + Constraint.make(footer, .left, .equal, to: self, .left), + Constraint.make(footer, .right, .equal, to: self, .right), + ]) + } + } + + func updateLayout(withDuration duration: TimeInterval, completion: (() -> Void)? = nil) { + guard duration != 0 else { + layoutIfNeeded() + completion?() + return + } + + UIView.animate(withDuration: duration, animations: { + self.layoutIfNeeded() + }, completion: { _ in + completion?() + }) + } + + func resetAutoShowTimer() { + autoShowTimer?.invalidate() + autoShowTimer = Timer.scheduledTimer(timeInterval: autoShowTimeInterval, target: self, selector: #selector(handleTimer), userInfo: nil, repeats: true) + } + + func trim(_ distance: CGFloat, min _min: CGFloat, max _max: CGFloat) -> CGFloat { + return max(min(distance, _max), _min) + } +} + +// MARK: - UIGestureRecognizerDelegate + +extension AutoToggleHeaderFooterView: UIGestureRecognizerDelegate { + public func gestureRecognizer(_: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith _: UIGestureRecognizer) -> Bool { + return true + } +} diff --git a/Example/AutoToggleHeaderFooterView.xcodeproj/project.pbxproj b/Example/AutoToggleHeaderFooterView.xcodeproj/project.pbxproj new file mode 100644 index 0000000..dc5ae9f --- /dev/null +++ b/Example/AutoToggleHeaderFooterView.xcodeproj/project.pbxproj @@ -0,0 +1,635 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; + 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; + 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; + 88FE2A4F6E30D3864C7EE031 /* Pods_AutoToggleHeaderFooterView_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7155A37D9A83225B561D06FB /* Pods_AutoToggleHeaderFooterView_Example.framework */; }; + AFAB238A1E8245BE00F95F83 /* LoadingCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAB23811E8245BE00F95F83 /* LoadingCell.swift */; }; + AFAB238B1E8245BE00F95F83 /* RootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAB23821E8245BE00F95F83 /* RootViewController.swift */; }; + AFAB238C1E8245BE00F95F83 /* SampleHeaderFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAB23831E8245BE00F95F83 /* SampleHeaderFooterView.swift */; }; + AFAB238D1E8245BE00F95F83 /* TableView_ViewController1.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAB23841E8245BE00F95F83 /* TableView_ViewController1.swift */; }; + AFAB238E1E8245BE00F95F83 /* TableViewController2.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAB23851E8245BE00F95F83 /* TableViewController2.swift */; }; + AFAB238F1E8245BE00F95F83 /* TableViewController3.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAB23861E8245BE00F95F83 /* TableViewController3.swift */; }; + AFAB23901E8245BE00F95F83 /* TableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAB23871E8245BE00F95F83 /* TableViewDataSource.swift */; }; + AFAB23911E8245BE00F95F83 /* UIView+Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAB23881E8245BE00F95F83 /* UIView+Constraint.swift */; }; + AFAB23921E8245BE00F95F83 /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAB23891E8245BE00F95F83 /* WebViewController.swift */; }; + AFAB23941E8245E100F95F83 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFAB23931E8245E100F95F83 /* AppDelegate.swift */; }; + B4C87BF23849FA5FEAF228BF /* Pods_AutoToggleHeaderFooterView_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8CD43D2D94E9D39F0354264 /* Pods_AutoToggleHeaderFooterView_Tests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 607FACC81AFB9204008FA782 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 607FACCF1AFB9204008FA782; + remoteInfo = AutoToggleHeaderFooterView; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 1141DA116F267D1EEBDEB42D /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; + 17BEBC29ADA7DF86DD5EE816 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; + 1A780CB63830D5CF80396499 /* Pods-AutoToggleHeaderFooterView_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AutoToggleHeaderFooterView_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.release.xcconfig"; sourceTree = ""; }; + 440E3B6DC4D73B498156DE0C /* Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig"; sourceTree = ""; }; + 607FACD01AFB9204008FA782 /* AutoToggleHeaderFooterView_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AutoToggleHeaderFooterView_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 607FACE51AFB9204008FA782 /* AutoToggleHeaderFooterView_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AutoToggleHeaderFooterView_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; + 6D13385CE48E9A09A34A2BA5 /* AutoToggleHeaderFooterView.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = AutoToggleHeaderFooterView.podspec; path = ../AutoToggleHeaderFooterView.podspec; sourceTree = ""; }; + 7155A37D9A83225B561D06FB /* Pods_AutoToggleHeaderFooterView_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AutoToggleHeaderFooterView_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 73EA86E9D74EF4F7F0B9B4E6 /* Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig"; sourceTree = ""; }; + 9C3C937BD8EB05A4C05F3FEF /* Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig"; sourceTree = ""; }; + AFAB23811E8245BE00F95F83 /* LoadingCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadingCell.swift; sourceTree = ""; }; + AFAB23821E8245BE00F95F83 /* RootViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RootViewController.swift; sourceTree = ""; }; + AFAB23831E8245BE00F95F83 /* SampleHeaderFooterView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleHeaderFooterView.swift; sourceTree = ""; }; + AFAB23841E8245BE00F95F83 /* TableView_ViewController1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableView_ViewController1.swift; sourceTree = ""; }; + AFAB23851E8245BE00F95F83 /* TableViewController2.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewController2.swift; sourceTree = ""; }; + AFAB23861E8245BE00F95F83 /* TableViewController3.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewController3.swift; sourceTree = ""; }; + AFAB23871E8245BE00F95F83 /* TableViewDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewDataSource.swift; sourceTree = ""; }; + AFAB23881E8245BE00F95F83 /* UIView+Constraint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Constraint.swift"; sourceTree = ""; }; + AFAB23891E8245BE00F95F83 /* WebViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = ""; }; + AFAB23931E8245E100F95F83 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + B8CD43D2D94E9D39F0354264 /* Pods_AutoToggleHeaderFooterView_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AutoToggleHeaderFooterView_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 607FACCD1AFB9204008FA782 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 88FE2A4F6E30D3864C7EE031 /* Pods_AutoToggleHeaderFooterView_Example.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 607FACE21AFB9204008FA782 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B4C87BF23849FA5FEAF228BF /* Pods_AutoToggleHeaderFooterView_Tests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 26FC55CDB4B69B380D460F69 /* Pods */ = { + isa = PBXGroup; + children = ( + 440E3B6DC4D73B498156DE0C /* Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig */, + 1A780CB63830D5CF80396499 /* Pods-AutoToggleHeaderFooterView_Example.release.xcconfig */, + 73EA86E9D74EF4F7F0B9B4E6 /* Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig */, + 9C3C937BD8EB05A4C05F3FEF /* Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + 3BFF6A2C7E240236DB3C18FF /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7155A37D9A83225B561D06FB /* Pods_AutoToggleHeaderFooterView_Example.framework */, + B8CD43D2D94E9D39F0354264 /* Pods_AutoToggleHeaderFooterView_Tests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 607FACC71AFB9204008FA782 = { + isa = PBXGroup; + children = ( + 607FACF51AFB993E008FA782 /* Podspec Metadata */, + 607FACD21AFB9204008FA782 /* Example for AutoToggleHeaderFooterView */, + 607FACE81AFB9204008FA782 /* Tests */, + 607FACD11AFB9204008FA782 /* Products */, + 26FC55CDB4B69B380D460F69 /* Pods */, + 3BFF6A2C7E240236DB3C18FF /* Frameworks */, + ); + sourceTree = ""; + }; + 607FACD11AFB9204008FA782 /* Products */ = { + isa = PBXGroup; + children = ( + 607FACD01AFB9204008FA782 /* AutoToggleHeaderFooterView_Example.app */, + 607FACE51AFB9204008FA782 /* AutoToggleHeaderFooterView_Tests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 607FACD21AFB9204008FA782 /* Example for AutoToggleHeaderFooterView */ = { + isa = PBXGroup; + children = ( + AFAB23931E8245E100F95F83 /* AppDelegate.swift */, + 607FACDC1AFB9204008FA782 /* Images.xcassets */, + 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, + AFAB23821E8245BE00F95F83 /* RootViewController.swift */, + AFAB239A1E82486A00F95F83 /* WebView */, + AFAB23991E82485900F95F83 /* TableView */, + AFAB239B1E82488900F95F83 /* Helper */, + 607FACD31AFB9204008FA782 /* Supporting Files */, + ); + name = "Example for AutoToggleHeaderFooterView"; + path = AutoToggleHeaderFooterView; + sourceTree = ""; + }; + 607FACD31AFB9204008FA782 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 607FACD41AFB9204008FA782 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 607FACE81AFB9204008FA782 /* Tests */ = { + isa = PBXGroup; + children = ( + 607FACEB1AFB9204008FA782 /* Tests.swift */, + 607FACE91AFB9204008FA782 /* Supporting Files */, + ); + path = Tests; + sourceTree = ""; + }; + 607FACE91AFB9204008FA782 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 607FACEA1AFB9204008FA782 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { + isa = PBXGroup; + children = ( + 6D13385CE48E9A09A34A2BA5 /* AutoToggleHeaderFooterView.podspec */, + 17BEBC29ADA7DF86DD5EE816 /* README.md */, + 1141DA116F267D1EEBDEB42D /* LICENSE */, + ); + name = "Podspec Metadata"; + sourceTree = ""; + }; + AFAB23991E82485900F95F83 /* TableView */ = { + isa = PBXGroup; + children = ( + AFAB23811E8245BE00F95F83 /* LoadingCell.swift */, + AFAB23871E8245BE00F95F83 /* TableViewDataSource.swift */, + AFAB23841E8245BE00F95F83 /* TableView_ViewController1.swift */, + AFAB23851E8245BE00F95F83 /* TableViewController2.swift */, + AFAB23861E8245BE00F95F83 /* TableViewController3.swift */, + ); + name = TableView; + sourceTree = ""; + }; + AFAB239A1E82486A00F95F83 /* WebView */ = { + isa = PBXGroup; + children = ( + AFAB23891E8245BE00F95F83 /* WebViewController.swift */, + ); + name = WebView; + sourceTree = ""; + }; + AFAB239B1E82488900F95F83 /* Helper */ = { + isa = PBXGroup; + children = ( + AFAB23831E8245BE00F95F83 /* SampleHeaderFooterView.swift */, + AFAB23881E8245BE00F95F83 /* UIView+Constraint.swift */, + ); + name = Helper; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 607FACCF1AFB9204008FA782 /* AutoToggleHeaderFooterView_Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AutoToggleHeaderFooterView_Example" */; + buildPhases = ( + C0976E62F8160708FDE6B13D /* [CP] Check Pods Manifest.lock */, + 607FACCC1AFB9204008FA782 /* Sources */, + 607FACCD1AFB9204008FA782 /* Frameworks */, + 607FACCE1AFB9204008FA782 /* Resources */, + 6BF6ABE653D9408911CA9951 /* [CP] Embed Pods Frameworks */, + 0D74B781FF441A4BC7341867 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AutoToggleHeaderFooterView_Example; + productName = AutoToggleHeaderFooterView; + productReference = 607FACD01AFB9204008FA782 /* AutoToggleHeaderFooterView_Example.app */; + productType = "com.apple.product-type.application"; + }; + 607FACE41AFB9204008FA782 /* AutoToggleHeaderFooterView_Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AutoToggleHeaderFooterView_Tests" */; + buildPhases = ( + 592C4704E074A2B1424B4096 /* [CP] Check Pods Manifest.lock */, + 607FACE11AFB9204008FA782 /* Sources */, + 607FACE21AFB9204008FA782 /* Frameworks */, + 607FACE31AFB9204008FA782 /* Resources */, + E114BDDC35DED52F6DD15831 /* [CP] Embed Pods Frameworks */, + 22DEE596AE68ECA336C78DDD /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 607FACE71AFB9204008FA782 /* PBXTargetDependency */, + ); + name = AutoToggleHeaderFooterView_Tests; + productName = Tests; + productReference = 607FACE51AFB9204008FA782 /* AutoToggleHeaderFooterView_Tests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 607FACC81AFB9204008FA782 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0720; + LastUpgradeCheck = 0820; + ORGANIZATIONNAME = CocoaPods; + TargetAttributes = { + 607FACCF1AFB9204008FA782 = { + CreatedOnToolsVersion = 6.3.1; + LastSwiftMigration = 0820; + }; + 607FACE41AFB9204008FA782 = { + CreatedOnToolsVersion = 6.3.1; + LastSwiftMigration = 0820; + TestTargetID = 607FACCF1AFB9204008FA782; + }; + }; + }; + buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "AutoToggleHeaderFooterView" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 607FACC71AFB9204008FA782; + productRefGroup = 607FACD11AFB9204008FA782 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 607FACCF1AFB9204008FA782 /* AutoToggleHeaderFooterView_Example */, + 607FACE41AFB9204008FA782 /* AutoToggleHeaderFooterView_Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 607FACCE1AFB9204008FA782 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, + 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 607FACE31AFB9204008FA782 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 0D74B781FF441A4BC7341867 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 22DEE596AE68ECA336C78DDD /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 592C4704E074A2B1424B4096 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 6BF6ABE653D9408911CA9951 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + C0976E62F8160708FDE6B13D /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + E114BDDC35DED52F6DD15831 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 607FACCC1AFB9204008FA782 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFAB238D1E8245BE00F95F83 /* TableView_ViewController1.swift in Sources */, + AFAB238F1E8245BE00F95F83 /* TableViewController3.swift in Sources */, + AFAB23901E8245BE00F95F83 /* TableViewDataSource.swift in Sources */, + AFAB23921E8245BE00F95F83 /* WebViewController.swift in Sources */, + AFAB238C1E8245BE00F95F83 /* SampleHeaderFooterView.swift in Sources */, + AFAB238E1E8245BE00F95F83 /* TableViewController2.swift in Sources */, + AFAB238A1E8245BE00F95F83 /* LoadingCell.swift in Sources */, + AFAB23911E8245BE00F95F83 /* UIView+Constraint.swift in Sources */, + AFAB23941E8245E100F95F83 /* AppDelegate.swift in Sources */, + AFAB238B1E8245BE00F95F83 /* RootViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 607FACE11AFB9204008FA782 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 607FACCF1AFB9204008FA782 /* AutoToggleHeaderFooterView_Example */; + targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 607FACDF1AFB9204008FA782 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 607FACED1AFB9204008FA782 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = 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_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"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 607FACEE1AFB9204008FA782 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = 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_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"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 607FACF01AFB9204008FA782 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 440E3B6DC4D73B498156DE0C /* Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = AutoToggleHeaderFooterView/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MODULE_NAME = ExampleApp; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Debug; + }; + 607FACF11AFB9204008FA782 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1A780CB63830D5CF80396499 /* Pods-AutoToggleHeaderFooterView_Example.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = AutoToggleHeaderFooterView/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MODULE_NAME = ExampleApp; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Release; + }; + 607FACF31AFB9204008FA782 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 73EA86E9D74EF4F7F0B9B4E6 /* Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Debug; + }; + 607FACF41AFB9204008FA782 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9C3C937BD8EB05A4C05F3FEF /* Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig */; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "AutoToggleHeaderFooterView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 607FACED1AFB9204008FA782 /* Debug */, + 607FACEE1AFB9204008FA782 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AutoToggleHeaderFooterView_Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 607FACF01AFB9204008FA782 /* Debug */, + 607FACF11AFB9204008FA782 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AutoToggleHeaderFooterView_Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 607FACF31AFB9204008FA782 /* Debug */, + 607FACF41AFB9204008FA782 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 607FACC81AFB9204008FA782 /* Project object */; +} diff --git a/Example/AutoToggleHeaderFooterView.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/AutoToggleHeaderFooterView.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..5371190 --- /dev/null +++ b/Example/AutoToggleHeaderFooterView.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Example/AutoToggleHeaderFooterView.xcodeproj/xcshareddata/xcschemes/AutoToggleHeaderFooterView-Example.xcscheme b/Example/AutoToggleHeaderFooterView.xcodeproj/xcshareddata/xcschemes/AutoToggleHeaderFooterView-Example.xcscheme new file mode 100644 index 0000000..4108abe --- /dev/null +++ b/Example/AutoToggleHeaderFooterView.xcodeproj/xcshareddata/xcschemes/AutoToggleHeaderFooterView-Example.xcscheme @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/AutoToggleHeaderFooterView.xcworkspace/contents.xcworkspacedata b/Example/AutoToggleHeaderFooterView.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..116bf93 --- /dev/null +++ b/Example/AutoToggleHeaderFooterView.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Example/AutoToggleHeaderFooterView/AppDelegate.swift b/Example/AutoToggleHeaderFooterView/AppDelegate.swift new file mode 100644 index 0000000..380d0d4 --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/AppDelegate.swift @@ -0,0 +1,25 @@ +// +// AppDelegate.swift +// AutoToggleHeaderFooterView +// +// Created by Tomoya Hayakawa on 02/20/2017. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + window = UIWindow(frame: UIScreen.main.bounds) + let viewController = RootViewController() + let navigationController = UINavigationController(rootViewController: viewController) + window?.rootViewController = navigationController + window?.makeKeyAndVisible() + + return true + } +} diff --git a/Example/AutoToggleHeaderFooterView/Base.lproj/LaunchScreen.xib b/Example/AutoToggleHeaderFooterView/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..2078b9e --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/Base.lproj/LaunchScreen.xib @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/AutoToggleHeaderFooterView/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/AutoToggleHeaderFooterView/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..b8236c6 --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,48 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Example/AutoToggleHeaderFooterView/Info.plist b/Example/AutoToggleHeaderFooterView/Info.plist new file mode 100644 index 0000000..e4049dd --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/Info.plist @@ -0,0 +1,36 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + + diff --git a/Example/AutoToggleHeaderFooterView/LoadingCell.swift b/Example/AutoToggleHeaderFooterView/LoadingCell.swift new file mode 100644 index 0000000..2b93f4e --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/LoadingCell.swift @@ -0,0 +1,26 @@ +// +// LoadingCell.swift +// AutoToggleHeaderFooterView +// +// Created by Tomoya Hayakawa on 2017/02/28. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit + +final class LoadingCell: UITableViewCell { + + let indicatorView = UIActivityIndicatorView(activityIndicatorStyle: .gray) + + override init(style: UITableViewCellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + + selectionStyle = .none + contentView.addSubview(indicatorView) + indicatorView.makeCenterEqualToSuperview() + } + + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/Example/AutoToggleHeaderFooterView/RootViewController.swift b/Example/AutoToggleHeaderFooterView/RootViewController.swift new file mode 100644 index 0000000..9cabcf6 --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/RootViewController.swift @@ -0,0 +1,60 @@ +// +// RootViewController.swift +// AutoToggleHeaderFooterView +// +// Created by Tomoya Hayakawa on 02/20/2017. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit +import AutoToggleHeaderFooterView + +class RootViewController: UITableViewController { + + let titles: [String] = [ + TableViewController1.name, + TableViewController2.name, + TableViewController3.name, + WebViewController.name, + ] + + override func viewDidLoad() { + super.viewDidLoad() + + navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) + } + + override func tableView(_: UITableView, numberOfRowsInSection _: Int) -> Int { + return titles.count + } + + override func tableView(_: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell") + cell.textLabel?.text = titles[indexPath.row] + + return cell + } + + override func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { + let viewController: UIViewController + + switch titles[indexPath.row] { + case TableViewController1.name: + viewController = TableViewController1() + + case TableViewController2.name: + viewController = TableViewController2() + + case TableViewController3.name: + viewController = TableViewController3() + + case WebViewController.name: + viewController = WebViewController() + + default: + viewController = UIViewController() + } + + navigationController?.pushViewController(viewController, animated: true) + } +} diff --git a/Example/AutoToggleHeaderFooterView/SampleHeaderFooterView.swift b/Example/AutoToggleHeaderFooterView/SampleHeaderFooterView.swift new file mode 100644 index 0000000..02ac21f --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/SampleHeaderFooterView.swift @@ -0,0 +1,22 @@ +// +// SampleHeaderFooterView.swift +// AutoToggleHeaderFooterView +// +// Created by Tomoya Hayakawa on 2017/02/28. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit + +final class SampleHeaderFooterView: UIView { + + init(height: CGFloat) { + super.init(frame: .zero) + frame.size.height = height + backgroundColor = #colorLiteral(red: 0.2549019754, green: 0.2745098174, blue: 0.3019607961, alpha: 0.7982047872) + } + + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/Example/AutoToggleHeaderFooterView/TableViewController2.swift b/Example/AutoToggleHeaderFooterView/TableViewController2.swift new file mode 100644 index 0000000..e48ef97 --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/TableViewController2.swift @@ -0,0 +1,93 @@ +// +// TableViewController2.swift +// AutoToggleHeaderFooterView +// +// Created by Tomoya Hayakawa on 2017/03/10. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit +import AutoToggleHeaderFooterView + +final class TableViewController2: UIViewController, UITableViewDelegate { + + static let name = "TableView+Header" + + private var loadDelay = TimeInterval(1.0) + + private let dataSource = TableViewDataSource() + private let header = SampleHeaderFooterView(height: 80) + + private var autoToggleView: AutoToggleHeaderFooterView! + private lazy var tableView: UITableView = { + let table = UITableView() + table.dataSource = self.dataSource + table.delegate = self + table.separatorStyle = .none + table.register(UITableViewCell.self, forCellReuseIdentifier: "MainCell") + table.register(LoadingCell.self, forCellReuseIdentifier: "LoadingCell") + return table + }() + + deinit { + print("deinit: " + TableViewController2.name) + } + + override func viewDidLoad() { + super.viewDidLoad() + + title = type(of: self).name + view.backgroundColor = .white + + // Initialize with any header or footer + autoToggleView = AutoToggleHeaderFooterView(header: header, footer: nil) + autoToggleView.addScrollView(tableView) + + // Add to any view + view.addSubview(autoToggleView) + + // If scrollview under the translucent NavigationBar, use this. + // And call `AutoToggleHeaderFooterView.register(scrollView:) at `viewDidLayoutSubviews`. + autoToggleView.makeEdgesEqualToSuperview() + + // Or not under the NavigationBar +// automaticallyAdjustsScrollViewInsets = false +// makeEdgesFitToLayoutGuide(view: autoToggleView) + } + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + + // If scrollview under the translucent NavigationBar, use this. + autoToggleView.register(scrollView: tableView) + } + + private func loadMoreData(completion: (() -> Void)?) { + DispatchQueue.global().asyncAfter(deadline: .now() + loadDelay) { [weak self] in + self?.dataSource.appendNewData() + DispatchQueue.main.async { + completion?() + } + } + } + + // MARK: - ScrollViewDelegate + + func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool { + + /// Have to call `showHeaderFooter(withDuration:completion:)` before scroll to top + autoToggleView.showHeaderFooter(withDuration: 0.3) + return true + } + + // MARK: - TableViewDelegate + + func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt _: IndexPath) { + guard let cell = cell as? LoadingCell else { return } + cell.indicatorView.startAnimating() + loadMoreData(completion: { + cell.indicatorView.stopAnimating() + tableView.reloadData() + }) + } +} diff --git a/Example/AutoToggleHeaderFooterView/TableViewController3.swift b/Example/AutoToggleHeaderFooterView/TableViewController3.swift new file mode 100644 index 0000000..8d86869 --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/TableViewController3.swift @@ -0,0 +1,86 @@ +// +// TableViewController3.swift +// AutoToggleHeaderFooterView +// +// Created by Tomoya Hayakawa on 2017/03/10. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit +import AutoToggleHeaderFooterView + +final class TableViewController3: UIViewController, UITableViewDelegate { + + static let name = "TableView+Footer" + + private var loadDelay = TimeInterval(1.0) + + private let dataSource = TableViewDataSource() + private let footer = SampleHeaderFooterView(height: 40) + + private var autoToggleView: AutoToggleHeaderFooterView! + private lazy var tableView: UITableView = { + let table = UITableView() + table.dataSource = self.dataSource + table.delegate = self + table.separatorStyle = .none + table.register(UITableViewCell.self, forCellReuseIdentifier: "MainCell") + table.register(LoadingCell.self, forCellReuseIdentifier: "LoadingCell") + return table + }() + + deinit { + print("deinit: " + TableViewController3.name) + } + + override func viewDidLoad() { + super.viewDidLoad() + + title = type(of: self).name + view.backgroundColor = .white + + // Initialize with any header or footer + autoToggleView = AutoToggleHeaderFooterView(header: nil, footer: footer) + autoToggleView.addScrollView(tableView) + + // Add to any view + view.addSubview(autoToggleView) + + // If scrollview under the translucent NavigationBar, use this. + // And call `AutoToggleHeaderFooterView.register(scrollView:) at `viewDidLayoutSubviews`. +// autoToggleView.makeEdgesEqualToSuperview() + + // Or not under the NavigationBar + automaticallyAdjustsScrollViewInsets = false + makeEdgesFitToLayoutGuide(view: autoToggleView) + } + + private func loadMoreData(completion: (() -> Void)?) { + DispatchQueue.global().asyncAfter(deadline: .now() + loadDelay) { [weak self] in + self?.dataSource.appendNewData() + DispatchQueue.main.async { + completion?() + } + } + } + + // MARK: - ScrollViewDelegate + + func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool { + + /// Have to call `showHeaderFooter(withDuration:completion:)` before scroll to top + autoToggleView.showHeaderFooter(withDuration: 0.3) + return true + } + + // MARK: - TableViewDelegate + + func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt _: IndexPath) { + guard let cell = cell as? LoadingCell else { return } + cell.indicatorView.startAnimating() + loadMoreData(completion: { + cell.indicatorView.stopAnimating() + tableView.reloadData() + }) + } +} diff --git a/Example/AutoToggleHeaderFooterView/TableViewDataSource.swift b/Example/AutoToggleHeaderFooterView/TableViewDataSource.swift new file mode 100644 index 0000000..7f71e1a --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/TableViewDataSource.swift @@ -0,0 +1,65 @@ +// +// TableViewDataSource.swift +// AutoToggleHeaderFooterView +// +// Created by Tomoya Hayakawa on 2017/02/28. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit + +final class TableViewDataSource: NSObject, UITableViewDataSource { + + var dataLimit = 50 + var colors = [#colorLiteral(red: 0.2588235438, green: 0.7568627596, blue: 0.9686274529, alpha: 1), #colorLiteral(red: 0.3647058904, green: 0.06666667014, blue: 0.9686274529, alpha: 1), #colorLiteral(red: 0.8549019694, green: 0.250980407, blue: 0.4784313738, alpha: 1), #colorLiteral(red: 0.9411764741, green: 0.4980392158, blue: 0.3529411852, alpha: 1), #colorLiteral(red: 0.9686274529, green: 0.78039217, blue: 0.3450980484, alpha: 1), #colorLiteral(red: 0.5843137503, green: 0.8235294223, blue: 0.4196078479, alpha: 1)] + var data = [String]() + + private var initialData: [String] { + return (1 ... 30).map { String($0) } + } + + override init() { + super.init() + data = initialData + } + + func resetData() { + data = initialData + } + + func appendNewData() { + data += ((data.count + 1) ... (data.count + 10)).map { String($0) } + } + + // MARK: - UITableViewDataSource + + func numberOfSections(in _: UITableView) -> Int { + return 2 + } + + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { + switch section { + case 0: + return data.count + case 1: + return data.count < dataLimit ? 1 : 0 + default: + fatalError() + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + switch indexPath.section { + case 0: + let cell = tableView.dequeueReusableCell(withIdentifier: "MainCell", for: indexPath) + cell.textLabel?.text = data[indexPath.row] + cell.backgroundColor = colors[indexPath.row % colors.count] + return cell + case 1: + let cell = tableView.dequeueReusableCell(withIdentifier: "LoadingCell", for: indexPath) + return cell + default: + fatalError() + } + } +} diff --git a/Example/AutoToggleHeaderFooterView/TableView_ViewController1.swift b/Example/AutoToggleHeaderFooterView/TableView_ViewController1.swift new file mode 100644 index 0000000..3f0691a --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/TableView_ViewController1.swift @@ -0,0 +1,116 @@ +// +// TableViewController1.swift +// AutoToggleHeaderFooterView +// +// Created by Tomoya Hayakawa on 2017/03/10. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit +import AutoToggleHeaderFooterView + +final class TableViewController1: UIViewController, UITableViewDelegate { + + static let name = "TableView+Header+Footer" + + private var loadDelay = TimeInterval(1.0) + + private let dataSource = TableViewDataSource() + private let header = SampleHeaderFooterView(height: 80) + private let footer = SampleHeaderFooterView(height: 40) + + private var autoToggleView: AutoToggleHeaderFooterView! + private lazy var tableView: UITableView = { + let table = UITableView() + table.dataSource = self.dataSource + table.delegate = self + table.separatorStyle = .none + table.register(UITableViewCell.self, forCellReuseIdentifier: "MainCell") + table.register(LoadingCell.self, forCellReuseIdentifier: "LoadingCell") + return table + }() + + deinit { + print("deinit: " + TableViewController1.name) + } + + override func viewDidLoad() { + super.viewDidLoad() + + title = type(of: self).name + view.backgroundColor = .white + + // Initialize with any header or footer + autoToggleView = AutoToggleHeaderFooterView(header: header, footer: footer) + autoToggleView.addScrollView(tableView) + + // Add to any view + view.addSubview(autoToggleView) + + // If scrollview under the translucent NavigationBar, use this. + // And call `AutoToggleHeaderFooterView.register(scrollView:) at `viewDidLayoutSubviews`. + autoToggleView.makeEdgesEqualToSuperview() + + // Or not under the NavigationBar +// automaticallyAdjustsScrollViewInsets = false +// makeEdgesFitToLayoutGuide(view: autoToggleView) + } + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + + // If scrollview under the translucent NavigationBar, use this. + autoToggleView.register(scrollView: tableView) + } + + private func loadMoreData(completion: (() -> Void)?) { + DispatchQueue.global().asyncAfter(deadline: .now() + loadDelay) { [weak self] in + self?.dataSource.appendNewData() + DispatchQueue.main.async { + completion?() + } + } + } + + // MARK: - ScrollViewDelegate + + func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool { + + /// Have to call `showHeaderFooter(withDuration:completion:)` before scroll to top + autoToggleView.showHeaderFooter(withDuration: 0.3) + return true + } + + // MARK: - TableViewDelegate + + func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt _: IndexPath) { + guard let cell = cell as? LoadingCell else { return } + cell.indicatorView.startAnimating() + loadMoreData(completion: { + cell.indicatorView.stopAnimating() + tableView.reloadData() + }) + } + + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + let label = UILabel() + label.text = "Section Header" + label.backgroundColor = .white + return label + } + + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + return 20 + } + + func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { + let label = UILabel() + label.text = "Section Footer" + label.backgroundColor = .white + return label + } + + func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { + return 20 + } +} diff --git a/Example/AutoToggleHeaderFooterView/UIView+Constraint.swift b/Example/AutoToggleHeaderFooterView/UIView+Constraint.swift new file mode 100644 index 0000000..75ca7b3 --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/UIView+Constraint.swift @@ -0,0 +1,52 @@ +// +// UIView+Constraint.swift +// AutoToggleHeaderFooterView +// +// Created by Tomoya Hayakawa on 2017/02/27. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit + +extension UIViewController { + func makeEdgesFitToLayoutGuide(view _view: UIView) { + _view.translatesAutoresizingMaskIntoConstraints = false + view.addConstraints([ + NSLayoutConstraint(item: _view, attribute: .top, relatedBy: .equal, + toItem: topLayoutGuide, attribute: .bottom, multiplier: 1.0, constant: 0), + NSLayoutConstraint(item: _view, attribute: .left, relatedBy: .equal, + toItem: view, attribute: .left, multiplier: 1.0, constant: 0), + NSLayoutConstraint(item: _view, attribute: .bottom, relatedBy: .equal, + toItem: bottomLayoutGuide, attribute: .top, multiplier: 1.0, constant: 0), + NSLayoutConstraint(item: _view, attribute: .right, relatedBy: .equal, + toItem: view, attribute: .right, multiplier: 1.0, constant: 0), + ]) + } +} + +extension UIView { + func makeEdgesEqualToSuperview() { + translatesAutoresizingMaskIntoConstraints = false + superview?.addConstraints([ + NSLayoutConstraint(item: self, attribute: .top, relatedBy: .equal, + toItem: superview, attribute: .top, multiplier: 1.0, constant: 0), + NSLayoutConstraint(item: self, attribute: .left, relatedBy: .equal, + toItem: superview, attribute: .left, multiplier: 1.0, constant: 0), + NSLayoutConstraint(item: self, attribute: .bottom, relatedBy: .equal, + toItem: superview, attribute: .bottom, multiplier: 1.0, constant: 0), + NSLayoutConstraint(item: self, attribute: .right, relatedBy: .equal, + toItem: superview, attribute: .right, multiplier: 1.0, constant: 0), + ]) + } + + func makeCenterEqualToSuperview() { + guard let superview = superview else { return } + translatesAutoresizingMaskIntoConstraints = false + superview.addConstraints([ + NSLayoutConstraint(item: self, attribute: .centerX, relatedBy: .equal, + toItem: superview, attribute: .centerX, multiplier: 1.0, constant: 0), + NSLayoutConstraint(item: self, attribute: .centerY, relatedBy: .equal, + toItem: superview, attribute: .centerY, multiplier: 1.0, constant: 0), + ]) + } +} diff --git a/Example/AutoToggleHeaderFooterView/WebViewController.swift b/Example/AutoToggleHeaderFooterView/WebViewController.swift new file mode 100644 index 0000000..8daad0b --- /dev/null +++ b/Example/AutoToggleHeaderFooterView/WebViewController.swift @@ -0,0 +1,56 @@ +// +// WebViewController.swift +// AutoToggleHeaderFooterView +// +// Created by Tomoya Hayakawa on 2017/02/21. +// Copyright (c) 2017 RECRUIT LIFESTYLE CO., LTD. All rights reserved. +// + +import UIKit +import WebKit +import AutoToggleHeaderFooterView + +final class WebViewController: UIViewController { + + static let name = "WebView+UIViewController" + + let webView = WKWebView(frame: .zero) + private let header = SampleHeaderFooterView(height: 80) + private let footer = SampleHeaderFooterView(height: 40) + + fileprivate lazy var autoToggleView: AutoToggleHeaderFooterView = { + let assistant = AutoToggleHeaderFooterView(header: self.header, footer: self.footer) + assistant.addSubview(self.webView) + assistant.register(scrollView: self.webView.scrollView) + return assistant + }() + + deinit { + print("deinit: " + WebViewController.name) + } + + override func viewDidLoad() { + super.viewDidLoad() + + title = type(of: self).name + view.backgroundColor = .white + automaticallyAdjustsScrollViewInsets = false + + webView.scrollView.delegate = self + + view.addSubview(autoToggleView) + makeEdgesFitToLayoutGuide(view: autoToggleView) + + webView.makeEdgesEqualToSuperview() + webView.load(URLRequest(url: URL(string: "https://www.recruit-lifestyle.co.jp/")!)) + } +} + +extension WebViewController: UIScrollViewDelegate { + func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool { + + /// Have to call `showHeaderFooter(withDuration:completion:)` before scroll to top + autoToggleView.showHeaderFooter(withDuration: 0.3) + return false + } +} diff --git a/Example/Podfile b/Example/Podfile new file mode 100644 index 0000000..2ecb711 --- /dev/null +++ b/Example/Podfile @@ -0,0 +1,11 @@ +use_frameworks! + +target 'AutoToggleHeaderFooterView_Example' do + pod 'AutoToggleHeaderFooterView', :path => '../' + + target 'AutoToggleHeaderFooterView_Tests' do + inherit! :search_paths + + + end +end diff --git a/Example/Podfile.lock b/Example/Podfile.lock new file mode 100644 index 0000000..8642a35 --- /dev/null +++ b/Example/Podfile.lock @@ -0,0 +1,16 @@ +PODS: + - AutoToggleHeaderFooterView (1.0.0) + +DEPENDENCIES: + - AutoToggleHeaderFooterView (from `../`) + +EXTERNAL SOURCES: + AutoToggleHeaderFooterView: + :path: ../ + +SPEC CHECKSUMS: + AutoToggleHeaderFooterView: c7c3c558dedc9743cdecb41a57e81e6d44317354 + +PODFILE CHECKSUM: 3096cd812cb2f4ae18f4a789be3c7143228e7dce + +COCOAPODS: 1.2.0 diff --git a/Example/Pods/Local Podspecs/AutoToggleHeaderFooterView.podspec.json b/Example/Pods/Local Podspecs/AutoToggleHeaderFooterView.podspec.json new file mode 100644 index 0000000..e15db19 --- /dev/null +++ b/Example/Pods/Local Podspecs/AutoToggleHeaderFooterView.podspec.json @@ -0,0 +1,18 @@ +{ + "name": "AutoToggleHeaderFooterView", + "version": "1.0.0", + "summary": "A header and footer toggle display-state depending on the scroll or time interval", + "homepage": "https://github.com/recruit-lifestyle/AutoToggleHeaderFooterView", + "license": "Apache License, Version 2.0", + "authors": { + "Tomoya Hayakawa": "rhd_internship_ER5@r.recruit.co.jp" + }, + "source": { + "git": "https://github.com/recruit-lifestyle/AutoToggleHeaderFooterView.git", + "tag": "1.0.0" + }, + "platforms": { + "ios": "8.0" + }, + "source_files": "AutoToggleHeaderFooterView/Classes/**/*" +} diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock new file mode 100644 index 0000000..8642a35 --- /dev/null +++ b/Example/Pods/Manifest.lock @@ -0,0 +1,16 @@ +PODS: + - AutoToggleHeaderFooterView (1.0.0) + +DEPENDENCIES: + - AutoToggleHeaderFooterView (from `../`) + +EXTERNAL SOURCES: + AutoToggleHeaderFooterView: + :path: ../ + +SPEC CHECKSUMS: + AutoToggleHeaderFooterView: c7c3c558dedc9743cdecb41a57e81e6d44317354 + +PODFILE CHECKSUM: 3096cd812cb2f4ae18f4a789be3c7143228e7dce + +COCOAPODS: 1.2.0 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..5c35797 --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,711 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 461E2B0C20C38D330B8816AF013EB926 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; + 610763FFB6CA98D091152284E17933F3 /* Pods-AutoToggleHeaderFooterView_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CA0C5930D8059BDA09403FDA18F83BCA /* Pods-AutoToggleHeaderFooterView_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 63B0666330DD7E9B88E8914D4023A930 /* AutoToggleHeaderFooterView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B8A142F8DBEF941146288100241ACD2 /* AutoToggleHeaderFooterView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79BFC52CB8F820B6568980E7996B604E /* Pods-AutoToggleHeaderFooterView_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B5C35B898356E443AEE5D1DFD0A1F14A /* Pods-AutoToggleHeaderFooterView_Example-dummy.m */; }; + 8435018C9C65D952AD1237AAE7D2FDDC /* Pods-AutoToggleHeaderFooterView_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BA2A4B51C42B121D8EE9C6F78C1348D7 /* Pods-AutoToggleHeaderFooterView_Tests-dummy.m */; }; + 8A2B8DC48C7954B12C598D66E1AF5D96 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = E33DFDC902BD731E955DFBCD526B7F7E /* Constraint.swift */; }; + A052D9827E2F464D3E46A1335BB1E655 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; + C481FA9834796651246C25A54ED14FA1 /* ScrollAssistantView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D92D712CD4B3C345A5F0F75336A21E46 /* ScrollAssistantView.swift */; }; + CFD853F12A1258095E4BDCFDF4B1BF76 /* AutoToggleHeaderFooterView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DF3F28CF7648E0A646112311EA9BC5BB /* AutoToggleHeaderFooterView-dummy.m */; }; + D60980531EE19940459472FA65928C79 /* Pods-AutoToggleHeaderFooterView_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 612A53908B3F748409AE3118CF710BA3 /* Pods-AutoToggleHeaderFooterView_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DA420DC3F464DC0A261B7BE3335900B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 6486D0ECC18BB5E3F86EC2F44A65C61B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 02274BFD7227473C3F2BE8094078A6C5; + remoteInfo = AutoToggleHeaderFooterView; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 079A8D1A2690581EF3A7EF255187226F /* Pods-AutoToggleHeaderFooterView_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AutoToggleHeaderFooterView_Example.release.xcconfig"; sourceTree = ""; }; + 0BBEDC7783D778B5618EC0CA0206113F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1AA441466B64AED9775CD7D9748B8027 /* Pods-AutoToggleHeaderFooterView_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AutoToggleHeaderFooterView_Example-frameworks.sh"; sourceTree = ""; }; + 1B634D5418D48D57FF625D36B06F9ACA /* Pods-AutoToggleHeaderFooterView_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AutoToggleHeaderFooterView_Example-acknowledgements.markdown"; sourceTree = ""; }; + 2B24AB879D6A2AD1B61EC8FF519D5393 /* Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.plist"; sourceTree = ""; }; + 334965B58DC849AE29464DF0C600941C /* Pods_AutoToggleHeaderFooterView_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AutoToggleHeaderFooterView_Tests.framework; path = "Pods-AutoToggleHeaderFooterView_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 37572CC8622BE5208DEFC9D8BC646032 /* Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig"; sourceTree = ""; }; + 38F98F3779AD02B3B73AA43EE529A77D /* Pods-AutoToggleHeaderFooterView_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AutoToggleHeaderFooterView_Tests-resources.sh"; sourceTree = ""; }; + 3AB82DB8D6795F7AAF9E3D0E3D3FFF99 /* Pods-AutoToggleHeaderFooterView_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AutoToggleHeaderFooterView_Tests-frameworks.sh"; sourceTree = ""; }; + 5B8A142F8DBEF941146288100241ACD2 /* AutoToggleHeaderFooterView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AutoToggleHeaderFooterView-umbrella.h"; sourceTree = ""; }; + 60A7E695B8C986302914154538AA522E /* AutoToggleHeaderFooterView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AutoToggleHeaderFooterView.xcconfig; sourceTree = ""; }; + 612A53908B3F748409AE3118CF710BA3 /* Pods-AutoToggleHeaderFooterView_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AutoToggleHeaderFooterView_Example-umbrella.h"; sourceTree = ""; }; + 8902D07FB1EF4D9BD0CE5CF29A0C84D2 /* Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig"; sourceTree = ""; }; + 9152A804DAD44231D32CA9712115A887 /* AutoToggleHeaderFooterView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AutoToggleHeaderFooterView.framework; path = AutoToggleHeaderFooterView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 958FC5445EB610A8205489C5E3DFD92A /* Pods-AutoToggleHeaderFooterView_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-AutoToggleHeaderFooterView_Example.modulemap"; sourceTree = ""; }; + 9613A241C86ED8B7CF9091AB38F296B3 /* Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig"; sourceTree = ""; }; + 97706F9417BBEAC54BA448C30CCDB0D9 /* AutoToggleHeaderFooterView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AutoToggleHeaderFooterView-prefix.pch"; sourceTree = ""; }; + A0A9CC2DC12FF9B06E00B66185792098 /* AutoToggleHeaderFooterView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = AutoToggleHeaderFooterView.modulemap; sourceTree = ""; }; + B5C35B898356E443AEE5D1DFD0A1F14A /* Pods-AutoToggleHeaderFooterView_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AutoToggleHeaderFooterView_Example-dummy.m"; sourceTree = ""; }; + BA0BF9DBAD81C9133A901C1E767E42AB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + BA2A4B51C42B121D8EE9C6F78C1348D7 /* Pods-AutoToggleHeaderFooterView_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AutoToggleHeaderFooterView_Tests-dummy.m"; sourceTree = ""; }; + BAB02CA6E6FFAA4C75BCF37AD50C4EC3 /* Pods-AutoToggleHeaderFooterView_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AutoToggleHeaderFooterView_Example-resources.sh"; sourceTree = ""; }; + BBC3BD1A5FFA56C7907AF54F2494EBC2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + BC03BC44B8574B07CBF0B72414EEB4A3 /* Pods-AutoToggleHeaderFooterView_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AutoToggleHeaderFooterView_Example-acknowledgements.plist"; sourceTree = ""; }; + C4B86AF250AABEFAFBF55F5B55233221 /* Pods_AutoToggleHeaderFooterView_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AutoToggleHeaderFooterView_Example.framework; path = "Pods-AutoToggleHeaderFooterView_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + CA0C5930D8059BDA09403FDA18F83BCA /* Pods-AutoToggleHeaderFooterView_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AutoToggleHeaderFooterView_Tests-umbrella.h"; sourceTree = ""; }; + CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + CD2788D6DCC4861590D09EBD11A478D0 /* Pods-AutoToggleHeaderFooterView_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-AutoToggleHeaderFooterView_Tests.modulemap"; sourceTree = ""; }; + D92D712CD4B3C345A5F0F75336A21E46 /* ScrollAssistantView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ScrollAssistantView.swift; sourceTree = ""; }; + DF3F28CF7648E0A646112311EA9BC5BB /* AutoToggleHeaderFooterView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AutoToggleHeaderFooterView-dummy.m"; sourceTree = ""; }; + E33DFDC902BD731E955DFBCD526B7F7E /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Constraint.swift; sourceTree = ""; }; + F02635237B277ACBB0EE05BE9B044AE4 /* Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.markdown"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 9856658ABBAEBF660C5C94BC1EC98410 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 461E2B0C20C38D330B8816AF013EB926 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B5170CE0C35242E97D47A15A24EC9DBD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DA420DC3F464DC0A261B7BE3335900B1 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED2B0ECE97D04E44C8444C47B3B7F046 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A052D9827E2F464D3E46A1335BB1E655 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 4119C8A77F7CB3003DE394673E82E66F /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + E744916C87FA9C209785790488D57E2F /* Pods-AutoToggleHeaderFooterView_Example */, + AD4151F5FEB782090E8C8E0C872F75B7 /* Pods-AutoToggleHeaderFooterView_Tests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 7453C6A86D35D74E51FD3A67B849EFAF /* AutoToggleHeaderFooterView */ = { + isa = PBXGroup; + children = ( + C9A86D05C8C4B6301C20146F74562ADA /* Classes */, + ); + name = AutoToggleHeaderFooterView; + path = AutoToggleHeaderFooterView; + sourceTree = ""; + }; + 7531C8F8DE19F1AA3C8A7AC97A91DC29 /* iOS */ = { + isa = PBXGroup; + children = ( + CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + 877AF14F9A81C3EA05D9FB8175E34BF0 /* Development Pods */, + BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, + E20E039EC4EE75DE4361728F7A917BCF /* Products */, + 4119C8A77F7CB3003DE394673E82E66F /* Targets Support Files */, + ); + sourceTree = ""; + }; + 877AF14F9A81C3EA05D9FB8175E34BF0 /* Development Pods */ = { + isa = PBXGroup; + children = ( + D42E3E24D4878AFFB7F79FF98CA7B2BC /* AutoToggleHeaderFooterView */, + ); + name = "Development Pods"; + sourceTree = ""; + }; + AD4151F5FEB782090E8C8E0C872F75B7 /* Pods-AutoToggleHeaderFooterView_Tests */ = { + isa = PBXGroup; + children = ( + 0BBEDC7783D778B5618EC0CA0206113F /* Info.plist */, + CD2788D6DCC4861590D09EBD11A478D0 /* Pods-AutoToggleHeaderFooterView_Tests.modulemap */, + F02635237B277ACBB0EE05BE9B044AE4 /* Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.markdown */, + 2B24AB879D6A2AD1B61EC8FF519D5393 /* Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.plist */, + BA2A4B51C42B121D8EE9C6F78C1348D7 /* Pods-AutoToggleHeaderFooterView_Tests-dummy.m */, + 3AB82DB8D6795F7AAF9E3D0E3D3FFF99 /* Pods-AutoToggleHeaderFooterView_Tests-frameworks.sh */, + 38F98F3779AD02B3B73AA43EE529A77D /* Pods-AutoToggleHeaderFooterView_Tests-resources.sh */, + CA0C5930D8059BDA09403FDA18F83BCA /* Pods-AutoToggleHeaderFooterView_Tests-umbrella.h */, + 8902D07FB1EF4D9BD0CE5CF29A0C84D2 /* Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig */, + 37572CC8622BE5208DEFC9D8BC646032 /* Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig */, + ); + name = "Pods-AutoToggleHeaderFooterView_Tests"; + path = "Target Support Files/Pods-AutoToggleHeaderFooterView_Tests"; + sourceTree = ""; + }; + BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { + isa = PBXGroup; + children = ( + 7531C8F8DE19F1AA3C8A7AC97A91DC29 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + C8D49BEB3B5BAC8617AADE074EED9811 /* Support Files */ = { + isa = PBXGroup; + children = ( + A0A9CC2DC12FF9B06E00B66185792098 /* AutoToggleHeaderFooterView.modulemap */, + 60A7E695B8C986302914154538AA522E /* AutoToggleHeaderFooterView.xcconfig */, + DF3F28CF7648E0A646112311EA9BC5BB /* AutoToggleHeaderFooterView-dummy.m */, + 97706F9417BBEAC54BA448C30CCDB0D9 /* AutoToggleHeaderFooterView-prefix.pch */, + 5B8A142F8DBEF941146288100241ACD2 /* AutoToggleHeaderFooterView-umbrella.h */, + BA0BF9DBAD81C9133A901C1E767E42AB /* Info.plist */, + ); + name = "Support Files"; + path = "Example/Pods/Target Support Files/AutoToggleHeaderFooterView"; + sourceTree = ""; + }; + C9A86D05C8C4B6301C20146F74562ADA /* Classes */ = { + isa = PBXGroup; + children = ( + E33DFDC902BD731E955DFBCD526B7F7E /* Constraint.swift */, + D92D712CD4B3C345A5F0F75336A21E46 /* ScrollAssistantView.swift */, + ); + name = Classes; + path = Classes; + sourceTree = ""; + }; + D42E3E24D4878AFFB7F79FF98CA7B2BC /* AutoToggleHeaderFooterView */ = { + isa = PBXGroup; + children = ( + 7453C6A86D35D74E51FD3A67B849EFAF /* AutoToggleHeaderFooterView */, + C8D49BEB3B5BAC8617AADE074EED9811 /* Support Files */, + ); + name = AutoToggleHeaderFooterView; + path = ../..; + sourceTree = ""; + }; + E20E039EC4EE75DE4361728F7A917BCF /* Products */ = { + isa = PBXGroup; + children = ( + 9152A804DAD44231D32CA9712115A887 /* AutoToggleHeaderFooterView.framework */, + C4B86AF250AABEFAFBF55F5B55233221 /* Pods_AutoToggleHeaderFooterView_Example.framework */, + 334965B58DC849AE29464DF0C600941C /* Pods_AutoToggleHeaderFooterView_Tests.framework */, + ); + name = Products; + sourceTree = ""; + }; + E744916C87FA9C209785790488D57E2F /* Pods-AutoToggleHeaderFooterView_Example */ = { + isa = PBXGroup; + children = ( + BBC3BD1A5FFA56C7907AF54F2494EBC2 /* Info.plist */, + 958FC5445EB610A8205489C5E3DFD92A /* Pods-AutoToggleHeaderFooterView_Example.modulemap */, + 1B634D5418D48D57FF625D36B06F9ACA /* Pods-AutoToggleHeaderFooterView_Example-acknowledgements.markdown */, + BC03BC44B8574B07CBF0B72414EEB4A3 /* Pods-AutoToggleHeaderFooterView_Example-acknowledgements.plist */, + B5C35B898356E443AEE5D1DFD0A1F14A /* Pods-AutoToggleHeaderFooterView_Example-dummy.m */, + 1AA441466B64AED9775CD7D9748B8027 /* Pods-AutoToggleHeaderFooterView_Example-frameworks.sh */, + BAB02CA6E6FFAA4C75BCF37AD50C4EC3 /* Pods-AutoToggleHeaderFooterView_Example-resources.sh */, + 612A53908B3F748409AE3118CF710BA3 /* Pods-AutoToggleHeaderFooterView_Example-umbrella.h */, + 9613A241C86ED8B7CF9091AB38F296B3 /* Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig */, + 079A8D1A2690581EF3A7EF255187226F /* Pods-AutoToggleHeaderFooterView_Example.release.xcconfig */, + ); + name = "Pods-AutoToggleHeaderFooterView_Example"; + path = "Target Support Files/Pods-AutoToggleHeaderFooterView_Example"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 27C062056E7056709D1485DCE5A630F1 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 610763FFB6CA98D091152284E17933F3 /* Pods-AutoToggleHeaderFooterView_Tests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CB90902904A091E2D967CF58EB687B0E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 63B0666330DD7E9B88E8914D4023A930 /* AutoToggleHeaderFooterView-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FFCBD029AAF162CE845DFEA02019C19C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D60980531EE19940459472FA65928C79 /* Pods-AutoToggleHeaderFooterView_Example-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 02274BFD7227473C3F2BE8094078A6C5 /* AutoToggleHeaderFooterView */ = { + isa = PBXNativeTarget; + buildConfigurationList = 89A95390959041229882B59A4554BB8E /* Build configuration list for PBXNativeTarget "AutoToggleHeaderFooterView" */; + buildPhases = ( + FC8B1C65B47BC80A37EC1398A7642669 /* Sources */, + 9856658ABBAEBF660C5C94BC1EC98410 /* Frameworks */, + CB90902904A091E2D967CF58EB687B0E /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AutoToggleHeaderFooterView; + productName = AutoToggleHeaderFooterView; + productReference = 9152A804DAD44231D32CA9712115A887 /* AutoToggleHeaderFooterView.framework */; + productType = "com.apple.product-type.framework"; + }; + 1AF10C36A06B2B60EE483A906474903B /* Pods-AutoToggleHeaderFooterView_Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = ABFE349B0AC1F4EFF06D7152634EA758 /* Build configuration list for PBXNativeTarget "Pods-AutoToggleHeaderFooterView_Tests" */; + buildPhases = ( + 2817A7EDE373A2592EE8B43CB778F03C /* Sources */, + ED2B0ECE97D04E44C8444C47B3B7F046 /* Frameworks */, + 27C062056E7056709D1485DCE5A630F1 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-AutoToggleHeaderFooterView_Tests"; + productName = "Pods-AutoToggleHeaderFooterView_Tests"; + productReference = 334965B58DC849AE29464DF0C600941C /* Pods_AutoToggleHeaderFooterView_Tests.framework */; + productType = "com.apple.product-type.framework"; + }; + 1B0088E729A9B1147B0234D5056CB945 /* Pods-AutoToggleHeaderFooterView_Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = F31F25B2BC88E2F3201A72BA6B706994 /* Build configuration list for PBXNativeTarget "Pods-AutoToggleHeaderFooterView_Example" */; + buildPhases = ( + 314DA186B71EF8CD0E1A11CF4565276B /* Sources */, + B5170CE0C35242E97D47A15A24EC9DBD /* Frameworks */, + FFCBD029AAF162CE845DFEA02019C19C /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 899A041A747BC7CCA611964AA57159CC /* PBXTargetDependency */, + ); + name = "Pods-AutoToggleHeaderFooterView_Example"; + productName = "Pods-AutoToggleHeaderFooterView_Example"; + productReference = C4B86AF250AABEFAFBF55F5B55233221 /* Pods_AutoToggleHeaderFooterView_Example.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = E20E039EC4EE75DE4361728F7A917BCF /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 02274BFD7227473C3F2BE8094078A6C5 /* AutoToggleHeaderFooterView */, + 1B0088E729A9B1147B0234D5056CB945 /* Pods-AutoToggleHeaderFooterView_Example */, + 1AF10C36A06B2B60EE483A906474903B /* Pods-AutoToggleHeaderFooterView_Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 2817A7EDE373A2592EE8B43CB778F03C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8435018C9C65D952AD1237AAE7D2FDDC /* Pods-AutoToggleHeaderFooterView_Tests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 314DA186B71EF8CD0E1A11CF4565276B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 79BFC52CB8F820B6568980E7996B604E /* Pods-AutoToggleHeaderFooterView_Example-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FC8B1C65B47BC80A37EC1398A7642669 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CFD853F12A1258095E4BDCFDF4B1BF76 /* AutoToggleHeaderFooterView-dummy.m in Sources */, + 8A2B8DC48C7954B12C598D66E1AF5D96 /* Constraint.swift in Sources */, + C481FA9834796651246C25A54ED14FA1 /* ScrollAssistantView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 899A041A747BC7CCA611964AA57159CC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AutoToggleHeaderFooterView; + target = 02274BFD7227473C3F2BE8094078A6C5 /* AutoToggleHeaderFooterView */; + targetProxy = 6486D0ECC18BB5E3F86EC2F44A65C61B /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 015A368F878AC3E2CEAE21DDE8026304 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 44CDBB6D11DE06DB64D6268622BDC47E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 54739ABE4E9A9B4795D4F64FB30BF4C8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 60A7E695B8C986302914154538AA522E /* AutoToggleHeaderFooterView.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AutoToggleHeaderFooterView/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = AutoToggleHeaderFooterView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 65C963CB2ACF0ED3716BFEBA2D106F98 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 60A7E695B8C986302914154538AA522E /* AutoToggleHeaderFooterView.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AutoToggleHeaderFooterView/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = AutoToggleHeaderFooterView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 7E542C71CFE04BDF4745B7D902A67681 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9613A241C86ED8B7CF9091AB38F296B3 /* Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_AutoToggleHeaderFooterView_Example; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 9DCAB20F956B1F4CFE1ECCABEE02874C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 079A8D1A2690581EF3A7EF255187226F /* Pods-AutoToggleHeaderFooterView_Example.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_AutoToggleHeaderFooterView_Example; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + B602FF1B425443F25E1E3FEB88DE759A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8902D07FB1EF4D9BD0CE5CF29A0C84D2 /* Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_AutoToggleHeaderFooterView_Tests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + C994F845BCF60F1B01709357E6980382 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 37572CC8622BE5208DEFC9D8BC646032 /* Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_AutoToggleHeaderFooterView_Tests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 015A368F878AC3E2CEAE21DDE8026304 /* Debug */, + 44CDBB6D11DE06DB64D6268622BDC47E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 89A95390959041229882B59A4554BB8E /* Build configuration list for PBXNativeTarget "AutoToggleHeaderFooterView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 54739ABE4E9A9B4795D4F64FB30BF4C8 /* Debug */, + 65C963CB2ACF0ED3716BFEBA2D106F98 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + ABFE349B0AC1F4EFF06D7152634EA758 /* Build configuration list for PBXNativeTarget "Pods-AutoToggleHeaderFooterView_Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B602FF1B425443F25E1E3FEB88DE759A /* Debug */, + C994F845BCF60F1B01709357E6980382 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F31F25B2BC88E2F3201A72BA6B706994 /* Build configuration list for PBXNativeTarget "Pods-AutoToggleHeaderFooterView_Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7E542C71CFE04BDF4745B7D902A67681 /* Debug */, + 9DCAB20F956B1F4CFE1ECCABEE02874C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/AutoToggleHeaderFooterView.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/AutoToggleHeaderFooterView.xcscheme new file mode 100644 index 0000000..937b97c --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/AutoToggleHeaderFooterView.xcscheme @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView-dummy.m b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView-dummy.m new file mode 100644 index 0000000..e507c18 --- /dev/null +++ b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_AutoToggleHeaderFooterView : NSObject +@end +@implementation PodsDummy_AutoToggleHeaderFooterView +@end diff --git a/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView-prefix.pch b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView-umbrella.h b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView-umbrella.h new file mode 100644 index 0000000..07f6813 --- /dev/null +++ b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double AutoToggleHeaderFooterViewVersionNumber; +FOUNDATION_EXPORT const unsigned char AutoToggleHeaderFooterViewVersionString[]; + diff --git a/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.modulemap b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.modulemap new file mode 100644 index 0000000..c9320da --- /dev/null +++ b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.modulemap @@ -0,0 +1,6 @@ +framework module AutoToggleHeaderFooterView { + umbrella header "AutoToggleHeaderFooterView-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.xcconfig b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.xcconfig new file mode 100644 index 0000000..d8f93b8 --- /dev/null +++ b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/AutoToggleHeaderFooterView +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/Info.plist b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Example/Pods/Target Support Files/AutoToggleHeaderFooterView/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Info.plist b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-acknowledgements.markdown new file mode 100644 index 0000000..4f8198e --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-acknowledgements.markdown @@ -0,0 +1,20 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## AutoToggleHeaderFooterView + +Copyright 2017 RECRUIT LIFESTYLE CO., LTD. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-acknowledgements.plist new file mode 100644 index 0000000..1f231a5 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-acknowledgements.plist @@ -0,0 +1,52 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright 2017 RECRUIT LIFESTYLE CO., LTD. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + License + Apache License, Version 2.0 + Title + AutoToggleHeaderFooterView + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-dummy.m b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-dummy.m new file mode 100644 index 0000000..278b9cc --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_AutoToggleHeaderFooterView_Example : NSObject +@end +@implementation PodsDummy_Pods_AutoToggleHeaderFooterView_Example +@end diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-frameworks.sh new file mode 100755 index 0000000..db05068 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-frameworks.sh @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-resources.sh b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-resources.sh new file mode 100755 index 0000000..4602c68 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-resources.sh @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-umbrella.h b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-umbrella.h new file mode 100644 index 0000000..e207edc --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_AutoToggleHeaderFooterView_ExampleVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_AutoToggleHeaderFooterView_ExampleVersionString[]; + diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig new file mode 100644 index 0000000..1a1ddb7 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.debug.xcconfig @@ -0,0 +1,10 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AutoToggleHeaderFooterView" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "AutoToggleHeaderFooterView" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.modulemap b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.modulemap new file mode 100644 index 0000000..eff6e0c --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.modulemap @@ -0,0 +1,6 @@ +framework module Pods_AutoToggleHeaderFooterView_Example { + umbrella header "Pods-AutoToggleHeaderFooterView_Example-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.release.xcconfig new file mode 100644 index 0000000..1a1ddb7 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Example/Pods-AutoToggleHeaderFooterView_Example.release.xcconfig @@ -0,0 +1,10 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AutoToggleHeaderFooterView" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "AutoToggleHeaderFooterView" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Info.plist b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-dummy.m b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-dummy.m new file mode 100644 index 0000000..4e26fbb --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_AutoToggleHeaderFooterView_Tests : NSObject +@end +@implementation PodsDummy_Pods_AutoToggleHeaderFooterView_Tests +@end diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-frameworks.sh b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-frameworks.sh new file mode 100755 index 0000000..0f29f13 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-frameworks.sh @@ -0,0 +1,92 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-resources.sh b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-resources.sh new file mode 100755 index 0000000..4602c68 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-resources.sh @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-umbrella.h b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-umbrella.h new file mode 100644 index 0000000..552c822 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_AutoToggleHeaderFooterView_TestsVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_AutoToggleHeaderFooterView_TestsVersionString[]; + diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig new file mode 100644 index 0000000..d4e9949 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.debug.xcconfig @@ -0,0 +1,7 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AutoToggleHeaderFooterView" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.framework/Headers" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.modulemap b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.modulemap new file mode 100644 index 0000000..b754a21 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.modulemap @@ -0,0 +1,6 @@ +framework module Pods_AutoToggleHeaderFooterView_Tests { + umbrella header "Pods-AutoToggleHeaderFooterView_Tests-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig new file mode 100644 index 0000000..d4e9949 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-AutoToggleHeaderFooterView_Tests/Pods-AutoToggleHeaderFooterView_Tests.release.xcconfig @@ -0,0 +1,7 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AutoToggleHeaderFooterView" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/AutoToggleHeaderFooterView/AutoToggleHeaderFooterView.framework/Headers" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Example/Tests/Info.plist b/Example/Tests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/Example/Tests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Example/Tests/Tests.swift b/Example/Tests/Tests.swift new file mode 100644 index 0000000..4ee8f0c --- /dev/null +++ b/Example/Tests/Tests.swift @@ -0,0 +1,28 @@ +import UIKit +import XCTest +import AutoToggleHeaderFooterView + +class Tests: 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. + XCTAssert(true, "Pass") + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure() { + // Put the code you want to measure the time of here. + } + } +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4c12872 --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ +Copyright 2017 RECRUIT LIFESTYLE CO., LTD. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..b4abfe7 --- /dev/null +++ b/README.md @@ -0,0 +1,149 @@ +# AutoToggleHeaderFooterView + +[![Version](https://img.shields.io/cocoapods/v/AutoToggleHeaderFooterView.svg?style=flat)](http://cocoapods.org/pods/AutoToggleHeaderFooterView) +[![License](https://img.shields.io/cocoapods/l/AutoToggleHeaderFooterView.svg?style=flat)](http://cocoapods.org/pods/AutoToggleHeaderFooterView) +[![Platform](https://img.shields.io/cocoapods/p/AutoToggleHeaderFooterView.svg?style=flat)](http://cocoapods.org/pods/AutoToggleHeaderFooterView) + +A header and footer toggle display-state depending on the scroll or time interval + + +## Requirements + +- iOS 8.0+ +- Swift 3.0.2 + +## Gif + +![movie](https://cloud.githubusercontent.com/assets/9880704/24184555/e81a9e00-0f11-11e7-84a7-49ca89f5cbfd.gif) + + +## Try Demo + +You can try Demo app quickly. + +``` +$ pod try 'AutoToggleHeaderFooterView' +``` + + +## Usage + +### Require call this! + +```swift +override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + + // If scrollview under the translucent NavigationBar, use this. + autoToggleView.register(scrollView: tableView) +} + + +// UIScrollViewDelegate + +func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool { + autoToggleView.showHeaderFooter(withDuration: 0.3) + return true +} +``` + +### TableView Example + +```swift +override func viewDidLoad() { + super.viewDidLoad() + + // Initialize with any header or footer + let autoToggleView = AutoToggleHeaderFooterView(header: header, footer: footer) + autoToggleView.addScrollView(tableView) + + // Add to any view + view.addSubview(autoToggleView) + + // If scrollview under the translucent NavigationBar, use this. + // And call `AutoToggleHeaderFooterView.register(scrollView:) at `viewDidLayoutSubviews`. + autoToggleView.makeEdgesEqualToSuperview() + + // Or not under the NavigationBar +// automaticallyAdjustsScrollViewInsets = false +// makeEdgesFitToLayoutGuide(view: autoToggleView) +} + +``` + +### WebView Example + +```swift +override func viewDidLoad() { + super.viewDidLoad() + + let autoToggleView = AutoToggleHeaderFooterView(header: header, footer: footer) + autoToggleView.addSubview(self.webView) + autoToggleView.register(scrollView: self.webView.scrollView) + + automaticallyAdjustsScrollViewInsets = false + + view.addSubview(autoToggleView) + makeEdgesFitToLayoutGuide(view: autoToggleView) + + webView.makeEdgesEqualToSuperview() + webView.load(URLRequest(url: URL(string: "https://www.recruit-lifestyle.co.jp/")!)) +} +``` + + +### Change options + +```swift +public var isTimerEnabled = true +public var isScrollHeaderFooterEnabled = true +public var showAnimationDuration = TimeInterval(0.5) +public var autoShowTimeInterval = TimeInterval(3.0) +``` + + +## Installation + +AutoToggleHeaderFooterView is available through [CocoaPods](http://cocoapods.org) or [Carthage](https://github.com/Carthage/Carthage). + +### CocoaPods + +To install it, simply add the following line to your Podfile: + +```ruby +pod "AutoToggleHeaderFooterView" +``` + +### Carthage + +To install it, simply add the following line to your Cartfile: + +``` +github "recruit-lifestyle/AutoToggleHeaderFooterView" +``` + + +## Credits + +AutoToggleHeaderFooterView is owned and maintained by [RECRUIT LIFESTYLE CO., LTD.](http://www.recruit-lifestyle.co.jp/) + +AutoToggleHeaderFooterView was originally created by [Tomoya Hayakawa](https://github.com/simorgh3196) + + +## License + +``` +Copyright 2017 RECRUIT LIFESTYLE CO., LTD. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` diff --git a/_Pods.xcodeproj b/_Pods.xcodeproj new file mode 120000 index 0000000..3c5a8e7 --- /dev/null +++ b/_Pods.xcodeproj @@ -0,0 +1 @@ +Example/Pods/Pods.xcodeproj \ No newline at end of file