Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
48 changes: 42 additions & 6 deletions JZCalendarWeekView/JZBaseWeekView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -521,19 +521,25 @@ extension JZBaseWeekView: UICollectionViewDelegate, UICollectionViewDelegateFlow

open func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
// handle the situation scrollViewDidEndDecelerating not being called
if !decelerate { self.endOfScroll() }
if !decelerate {
self.endOfScroll()
self.scrollDirection = nil
}
}

// This function will be called when veritical scrolling ends
open func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
self.endOfScroll()

if checkDragRangesInHorizontalScroll() {
self.scrollDirection = nil
}
}

/// Some actions need to be done when scroll ends
private func endOfScroll() {
// vertical scroll should not load page, handled in loadPage method
loadPage()
self.scrollDirection = nil
}

open func scrollViewDidScroll(_ scrollView: UIScrollView) {
Expand Down Expand Up @@ -586,10 +592,12 @@ extension JZBaseWeekView: UICollectionViewDelegate, UICollectionViewDelegateFlow

// sectionScroll load page
private func loadPageSectionScroll() {
let currentDate = getDateForContentOffsetX(collectionView.contentOffset.x)
let currentInitDate = currentDate.add(component: .day, value: -numOfDays)
self.initDate = currentInitDate
self.forceReload()
if checkDragRangesInHorizontalScroll() {
let currentDate = getDateForContentOffsetX(collectionView.contentOffset.x)
let currentInitDate = currentDate.add(component: .day, value: -numOfDays)
self.initDate = currentInitDate
self.forceReload()
}
}

/// pageScroll loading next page or previous page (Only three pages (3*numOfDays) exist at the same time)
Expand Down Expand Up @@ -635,6 +643,28 @@ extension JZBaseWeekView {
return timeline
}

// If you drag again before the drag is complete,
// Ensure that it does not fall outside the set range.
func checkDragRangesInHorizontalScroll() -> Bool {
guard let scrollDirection = self.scrollDirection, scrollDirection.direction == .horizontal else { return true }
let currentStartDate = getDateForContentOffsetX(collectionView.contentOffset.x) // Left-hand date of the screen you are viewing
let currentEndDate = getDateForContentOffsetX(collectionView.contentOffset.x + contentViewWidth - 1) // The right-hand date of the screen you are viewing

// Initialize if within the set range left scroll.
if let startDate = self.scrollableRange.startDate {
if startDate.totalDistance(from: currentStartDate, resultIn: .day)! < 0 {
return false
}
}
// Initialize if within the set range right scroll.
if let endDate = self.scrollableRange.endDate {
if endDate.totalDistance(from: currentEndDate, resultIn: .day)! > 0 {
return false
}
}
// return OK set next Range
return true
}
}

// MARK: - Horizontal scrollable range methods
Expand Down Expand Up @@ -735,3 +765,9 @@ extension JZBaseWeekView: WeekViewFlowLayoutDelegate {
return JZSupplementaryViewKinds.eventCell
}
}

extension Date { // Date Comparison
func totalDistance(from date: Date, resultIn component: Calendar.Component) -> Int? {
return Calendar.current.dateComponents([component], from: self, to: date).value(for: component)
}
}